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]
|