点个LED看似简单,实际上它是在了解ST的编程特点及寄存器控制基础上的。 一、启动 ST的公司的例程中,使用startup_stm32f030x8.s文件作为启动时执行的第一步。在这个文件里要执行的工作是: ; J5 F& i5 ]" \; `. e/ o' Hn 初始化SP; 9 Y1 `* U, r; l) j4 _5 ]n 初始化PC指针 --- 指向iar_program_start n 设置中断向量表各exception的地址 9 ^& X$ N# Y, L6 y p7 t4 m% Tn 配置系统时钟 n 转向C语言的main函数 复位入口的指令为: * z6 z! m5 m; oReset_Handler 6 b2 x5 C. I' _ a LDR R0, =SystemInit " z" d- g" f" y* [. S V BLX R0 // 调用SystemInit()函数。这个函数在 // system_stm32f0xx.c文件中。 LDR R0, =__iar_program_start B+ u6 q) r) S" N! D9 K BX R0 // 跳转主程序 可见,ST公司的方法,对系统时钟等的初始化,并不是在main()函数中执行的。 " s( d) K) p6 d) QSystemInit()函数中,设置RCC的几个寄存器,初始化系统时钟。 V0 U. _: C/ f! p8 @' ~………… #ifdefined (PLL_SOURCE_HSI)* m' H5 f9 B" C1 `/ E, ^ /* At this stage the HSI is already enabled */9 e5 s" r; |. `9 t. V, k ………… #else #if defined (PLL_SOURCE_HSE) /* Enable HSE */ ; ~7 x7 ?! N* n …………' T! M; S7 e% i0 M #endif 二、延时函数 & [# i7 S) D( a1 I' ]在早期的单片机应用中,一般使用循环来延时,而M0有SYSTICK,使用它延时就可不占CPU时间。 4 O: r5 {% u$ T# B4 p1、配置Systick 使用SysTick_Config()函数完成。 2、在中断SysTick_Handler中实现计数 void SysTick_Handler(void) : O& E! f; w9 L{ - P% F7 v k0 [3 i if(TimingDelay != 0x00) o% `! @) b' U( Z; g; K6 _ { 3 L# T- @ A. H1 ~( J* M TimingDelay--; } } 三、IO控制 " k+ J+ V! R% t o; M0 Ostm32f030的IO功能主要有 # s8 s, b6 [' G* M) L# _* Il 输入悬空 5 \ r2 h0 y1 q' b7 L% y% ?l 输入上拉 ; t$ x: o# e% S9 O; `l 输入下拉 * x0 y* X( j$ ?" M) `l 模拟信号 l 输出开漏加上拉或下拉 l 输出推挽加上拉或下拉 % n) `# |; d6 {8 Z( g% ]" il 其它功能推挽上拉或下拉 l 其它功能开漏上拉或下拉 0 ^; P9 j! t: ?: a v" lIO的控制寄存器实现以上功能。有端口上(下)拉控制寄存器、置位寄存器、清0寄存器、切换寄存器等12个控制寄存器。对LED的控制,使用数据输出寄存器。 四、程序 1 S8 v, t/ X2 Gint main(void) { # g+ n" c6 w, m: o( A, v3 B# i LEDInit(LED3); , f: S8 I; s @ { LEDInit(LED4); 0 P0 P% ^8 I: A, }. q( ^3 e6 c6 Y /*Turn on LED3 and LED4 */ 7 p* B z8 ]; I* \ LEDOn(LED3); LEDOn(LED4); " n4 n7 x) a, u, [. t if(SysTick_Config(SystemCoreClock / 1000)) * u: }1 t/ K2 [4 J h { /*Capture error */ while(1); } for(;;) + M) F' X m: D- a8 B { /* Toggle LED4 */ : ]( `2 H9 D" v# J9 T, f7 u1 d+ b: g LEDToggle(LED4); / H+ ~0 p2 H/ A6 q /* Insert 50 ms delay */ Delay(50); # b* u7 }* i$ w& V: x6 n /* Toggle LED3 */ LEDToggle(LED3); 0 T: b. c! p) x4 v: I! w3 h /* Insert 100 ms delay */ 7 V+ H4 k( ?7 k5 F2 `; K2 k Delay(100); } } |
STM32固件库分享,超全系列整理
三创电子(Tcreate)-STM32F030核心板代码
STM32F0 ADC(DMA中断)多通道,注释超详细
FreeRTOS在STM32F030上的移植
基于STM32移植而引发的疑问经验分享
分享STM32F051中文参考手册(重制书签版)
游名:STM32F0+Trinamic智能步进驱动芯片TMC5160(最高20A)参考原...
【MCU实战经验】+STM32F030的步进电机加减速
STM32F0的中文技术参考手册(标签处理过)
基于STM32F030硬件SPI经验分享
RE:初学STM32F0探索套件之《STM32F0DISCOVERY点亮LED》
$ X! O2 V- \* N- \& p
4 B' k/ t9 U7 K& e
已添加到社区网友原创汇总:6 L% _8 ~& N' o9 Z, M
STM32F030探索套件开发日志,中文教程,使用问答70篇