Home  |   방명록 2021-11-29 (월) 
Untitled Document
  S e a r c h
M e n u
프로그램
개발자료
고전음악실
대청마루
집주인
비망록
갤러리
  B o a r d
게시판
Untitled Document
개발자료 Software / Hardware 개발 관련 정보

STMicroelectronics ARM Cortex-M3 STM32F103

STM32F103

32비트의 성능을 8비트 가격에 제공하는 ARM 코어 마이크로컨트롤러이다. ($2 ~ $4 대로 AVR 과 유사한 가격 WOW!!)

특징

  • 최신 ARM 32비트 Cortex-M3 CPU 코어로 ARM7 Thumb 대비 30% 고속 및 저전력화
  • 72 MHz (90 DMIPS) 속도
  • 128KB 플래시, 20KB SRAM
  • 12비트 AD 컨버터 x 2
  • 7 채널 DMA 컨트롤러
  • 3 UART, USB, 2 SPI
  • 배터리 전원 공급이 가능한 RTC 블럭, 온도 센서 내장
  • 36, 48, 64, 100 핀 패키지 - 패밀리간 pin-to-pin 및 소프트웨어 호환

GCC 컴파일러

WinARM 에서는 아직 지원하지 않으며 (*테스트 버전을 WinARM 20080331 부터 제공하고 있다.) Cortex-M3가 지원되는 GCC toolchain은 아래 주소에서 다운로드할 수 있다.
http://www.codesourcery.com/gnu_toolchains/arm/download.html (EABI를 다운받는다.)
(2012.1.22 확인해 보니 MentorGraphics로 변경 됨)
(https://sourcery.mentor.com/public/gnu_toolchain/arm-none-eabi/arm-2012.03-56-arm-none-eabi.exe)
또는,
Ride7: GCC가 내장된 IDE

* Codesourcery Lite는 Cortex-M4의 하드웨어 FPU를 지원하지 않는다고 함
https://launchpad.net/gcc-arm-embedded: 하드웨어 FPU 지원

Cortex-m GCC개발 환경
http://cafe.naver.com/ArticleRead.nhn?clubid=17219286&articleid=6809
http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/index_cortex.html

STM32F40x 기본 프로젝트 (GCC, IAR, KEIL)
http://cafe.naver.com/ArticleRead.nhn?clubid=10750951&articleid=200077

내장 부트로더

부트옵션 핀이 BOOT0 = high, BOOT1 = low 으로 설정된 경우에는 시스템 롬에 내장된 부트로더가 실행되고 UART1 포트를 통해 사용자 프로그램을 다운로드 할 수 있다. BOOT0 = low 인 경우에는 사용자 프로그램이 실행된다.

STM32flash bootloader

다양한 기능을 가진 부트로더입니다.
1. 사용자 프로그램에 통합될 수도 있고,
2. ROM 영역의 앞부분에 존재하면서 사용자 프로그램을 다운로드 할 수도 있으며,
3. RAM 영역에 사용자 프로그램을 다운로드하여 테스트 할 수도 있습니다.
4. 자동으로 적절한 시작 위치로 사용자 프로그램을 다운로드 합니다.
5. High-density device (2K 페이지 사이즈)도 지원합니다.
GCC를 사용해 개발되었습니다.

stm32flash.zip ver2.0 (344KB)

STM32 downloader

ST의 Flash Loader를 대체할 수 있는 시리얼 다운로드 프로그램입니다.
개발시 뿐만아니라 양산시에도 사용할 수 있도록 카운터 기능 등이 있습니다..

STM32Downloader.zip ver1.1 (92.6KB)

JTAG 디버깅

저렴한 FT2232를 사용한 보드와 openocd를 이용한 디버깅 방법도 있지만
J-Link를 사용하고 있다면 J-Link Debugger 프로그램을 사용하면 보다 편리합니다.
https://www.segger.com/j-link-debugger.html

JTAG 양산지원 자동화 프로그램 (JlinkAuto)

JTAG을 이용하는 것이 가장 빠르게 프로그램을 다운로드 할 수 있습니다.
J-Link를 사용시 다운로드를 자동화 해 주는 프로그램입니다.
http://cafe.naver.com/carroty/230465

HardFaultException 처리

HardFaultException 은 주로 stack overflow 나 잘못된 메모리 억세스시 발생합니다.
스택 크기를 늘려줘도 HardFaultException이 계속 발생하면 어딘가 메모리쪽 문제가 발생한 것인데, 위치를 알기 어렵습니다.
에러난 위치를 찾을때 다음과 같은 방법이 있습니다.
The Definitive Guide to the ARM Cortex-M3 라는 책에 나온 처리 방법입니다.

// GCC 컴파일러의 경우
void HardFaultException(void)
{
 asm (//"IMPORT hard_fault_handler_c \n"
      "TST LR, #4 \n"
      "ITE EQ \n"
      "MRSEQ R0, MSP \n"
      "MRSNE R0, PSP \n"
      "B hard_fault_handler_c");
}

// IAR 컴파일러의 경우
void HardFault_Handler(void)
{
      __ASM("TST LR, #4");
      __ASM("ITE EQ");
      __ASM("MRSEQ R0, MSP");
      __ASM("MRSNE R0, PSP");
      __ASM("B hard_fault_handler_c");
}

// hard fault handler in C, with stack frame location as input parameter
void hard_fault_handler_c(unsigned int * hardfault_args)
{
	printf("\r\n\r\n[Hard fault handler]\r\n");
	printf("R0 = %x\r\n", (unsigned long) hardfault_args[0]);
	printf("R1 = %x\r\n", (unsigned long) hardfault_args[1]);
	printf("R2 = %x\r\n", (unsigned long) hardfault_args[2]);
	printf("R3 = %x\r\n", (unsigned long) hardfault_args[3]);
	printf("R12 = %x\r\n", (unsigned long) hardfault_args[4]);
	printf("LR [R14] = %x  subroutine call return address\r\n", (unsigned long) hardfault_args[5]);
	printf("PC [R15] = %x  program counter\r\n", (unsigned long) hardfault_args[6]);
	printf("PSR = %x\r\n", (unsigned long) hardfault_args[7]);
	printf("BFAR = %x\r\n", (*((volatile unsigned long *)(0xE000ED38))));
	printf("CFSR = %x\r\n", (*((volatile unsigned long *)(0xE000ED28))));
	printf("HFSR = %x\r\n", (*((volatile unsigned long *)(0xE000ED2C))));
	printf("DFSR = %x\r\n", (*((volatile unsigned long *)(0xE000ED30))));
	printf("AFSR = %x\r\n", (*((volatile unsigned long *)(0xE000ED3C))));
	printf("SCB_SHCSR = %x\r\n", SCB->SHCSR);

	NVIC_SystemReset();
}
HardFaultException 이 발생한 경우 스택에서 이전 PC값을 출력해 주는 것입니다.
스택까지 깨진 경우는 소용이 없겠지만요.
PC값이 PC = 8005C18 라고 나온다면 *.lss 파일에서 이 주소를 찾아보면 어느 부분을 실행하다가 에러가 발생한 것인지 알 수 있습니다.

다른 Cortex-M3 제품

NXP, TI (Luminary Micro), Toshiba, Atmel 등 에서도 제품이 나오거나 나올 예정입니다.
현재는 Cortex-M4 코어인 STM32F4 시리즈까지 나와서 168MHz 까지 가능하며 NXP에서는 180MHz, TI에서는 200MHz 제품이 나오고 있습니다.
486 66MHz, 펜티엄 200MHz 시절을 생각하면 MCU가 200MHz로 돌아 간다니 꿈만 같은 속도 입니다.

링크

STM32 Application Note
STM32 User Forum
STM32 Primer Community
[PDF] Cortex-M3 Technical Reference Manual
RT-Thread RTOS
CooCox CoOS RTOS

2008-01-07 [조회: 32767]

이전글: 국산 32비트 MCU 에이디칩스 TG471
다음글: 8비트로의 귀환(?) 100MIPS 초고속 C8051F130

목록보기
 
이름 암호
(스팸 방지용)오늘의 날짜를 숫자만으로 입력하세요.(예: 12)

비밀번호
목록보기
 
Copyright ⓒ 2021 All Rights Reserved.