【晒心得】---- STM32F0DISCOVERY点亮LED
[复制链接]
STM32F0DISCOVERY点亮LED 点个LED看似简单,实际上它是在了解ST的编程特点及寄存器控制基础上的。 一、启动 ST的公司的例程中,使用startup_stm32f030x8.s文件作为启动时执行的第一步。在这个文件里要执行的工作是: n 初始化SP; n 初始化PC指针 --- 指向iar_program_start n 设置中断向量表各exception的地址 n 配置系统时钟 n 转向C语言的main函数 复位入口的指令为: Reset_Handler LDR R0, =SystemInit BLX R0 // 调用SystemInit()函数。这个函数在 // system_stm32f0xx.c文件中。 LDR R0, =__iar_program_start BX R0 // 跳转主程序 可见,ST公司的方法,对系统时钟等的初始化,并不是在main()函数中执行的。 SystemInit()函数中,设置RCC的几个寄存器,初始化系统时钟。 ………… #ifdefined (PLL_SOURCE_HSI)
/* At this stage the HSI is already enabled */
…………
#else
#if defined (PLL_SOURCE_HSE)
/* Enable HSE */
…………
#endif 二、延时函数 在早期的单片机应用中,一般使用循环来延时,而M0有SYSTICK,使用它延时就可不占CPU时间。 1、配置Systick 使用SysTick_Config()函数完成。 2、在中断SysTick_Handler中实现计数 void SysTick_Handler(void) { if(TimingDelay != 0x00) { TimingDelay--; } } 三、IO控制 stm32f030的IO功能主要有 l 输入悬空 l 输入上拉 l 输入下拉 l 模拟信号 l 输出开漏加上拉或下拉 l 输出推挽加上拉或下拉 l 其它功能推挽上拉或下拉 l 其它功能开漏上拉或下拉 IO的控制寄存器实现以上功能。有端口上(下)拉控制寄存器、置位寄存器、清0寄存器、切换寄存器等12个控制寄存器。对LED的控制,使用数据输出寄存器。 四、程序 int main(void) { LEDInit(LED3); LEDInit(LED4); /*Turn on LED3 and LED4 */ LEDOn(LED3); LEDOn(LED4); if(SysTick_Config(SystemCoreClock / 1000)) { /*Capture error */ while(1); } for(;;) { /* Toggle LED4 */ LEDToggle(LED4); /* Insert 50 ms delay */ Delay(50); /* Toggle LED3 */ LEDToggle(LED3); /* Insert 100 ms delay */ Delay(100); } }
|