附:智林STM32开发LED例程
https://static.assets-stash.eet-china.com/album/old-resources/2008/11/13/7b625fa1-aded-485a-ae1d-8c2aed251c50.rar
智林STM32开发板LED程序解析
关于智林STM32开发板的LED程序解析
智林开发板是完全自主开发板,不象有些大公司,说是自己的开发板,其实是ST公司批发出来的,再卖给买家.再者智林开发板做功精良,用材讲究,有个65536的1.8寸真彩屏,附送的USB线都是上层好线.且物超所值,不贵但性价比很高,其例子超简单,完全没用STM32那个库,当然用户就想用那个库可以自己编写用库的程序,
现就LED程序解析如下:
*/
/*----------------------------------------------------------*\
| 引入相关芯片的头文件 |
\*----------------------------------------------------------*/
#include <stm32f10x_lib.h> // STM32F10x Library Definitions
#include "STM32_Init.h" // STM32 Initialization
/*----------------------------------------------------------*\
| HARDWARE DEFINE |
\*----------------------------------------------------------*/
#define LED ( 1 << 5 ) // PB5: LED D2
/*----------------------------------------------------------*\
| Delay |
| 延时 Inserts a delay time. |
| nCount: 延时时间 |
| nCount: specifies the delay time length. |
\*----------------------------------------------------------*/
void Delay(vu32 nCount) {
for(; nCount != 0; nCount--);
}
/*----------------------------------------------------------*\
| MIAN ENTRY |
\*----------------------------------------------------------*/
int main (void) {
stm32_Init (); // STM32 setup
for(;;) {
GPIOB->ODR &= ~LED; // switch on LED
Delay(2000000);
GPIOB->ODR |= LED; // switch off LED
Delay(2000000);
}
}
/*----------------------------------------------------------*\
| END OF FILE |
\*----------------------------------------------------------*/
就这么一小段,LED就点亮了,完全没用库,程序空间超小,有人不理解,GPIOB在哪定义了,ODR又是什么,时钟又在哪里,
其实,智林这段程序完全用了,Keil下的那个STM32F10x.s文件
接着是STM32Init.c
在这里初始化实钟
void stm32_Init () {
#if __EFI_SETUP
stm32_EfiSetup ();
#endif
#if __CLOCK_SETUP
stm32_ClockSetup ();
#endif
#if __SYSTICK_SETUP
stm32_SysTickSetup ();
#endif
#if __RTC_SETUP
stm32_RtcSetup ();
#endif
#if __TIMER_SETUP
stm32_TimerSetup ();
#endif
#if __GPIO_SETUP
stm32_GpioSetup ();
#endif
#if __USART_SETUP
stm32_UsartSetup();
#endif
#if __EXTI_SETUP
stm32_ExtiSetup();
#endif
#if __TAMPER_SETUP
stm32_TamperSetup();
#endif
#if __IWDG_SETUP
stm32_IwdgSetup(); // this should be the last function. watchdog is running afterwards
#endif
} // end of stm32_Init
GPIOB也是在STM32F10x_map.h文件中定义的
而ODR也是在STM32F10x_map.h中定义的
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
而那个LED灯,硬件接在PB5上
#define LED ( 1 << 5 ) // PB5: LED D2
根据STM32F10x_map.h,就应射在管亮来寄存器上,所以就点亮了
文章评论(0条评论)
登录后参与讨论