最近深感自己学习STM32过于短浅,趁着有时间补充了一些STM32的基本知识,用博客记录一下,话不多说进入正题。
本文可用于刚开始学习STM32的同学更好地进行STM32开发。
所用硬件:正点原子STM32F1精英版(芯片型号:STM32F103ZET6)
常见问题解答:
1.正点原子里标准例程分为寄存器,库函数和HAL库,这些都是什么区别?
解答:
寄存器的例程中就是直接对硬件的寄存器进行操作,类似51的开发。举个例子:
RCC->APB2ENR|=1<<3;
RCC->APB2ENR|=1<<6;
GPIOB->CRL&=0XFF0FFFFF;
GPIOB->CRL|=0X00300000;
GPIOB->ODR|=1<<5;
库函数的例程则是有许多大神们将这些对寄存器的操作进行了封装,封装成了一些库函数,不需要对底层的寄存器有过多的了解就能够进行程序的编写。
HAL库。。。。实际开发中还没用过,以后用了我再更。
很多同学一上来打开例程中的库函数版本,看到里面那么多文件可能都懵了(我当初就这样),所以今天对库函数中的文件结构进行大概的说明。
————————————————正文分割线
以正点原子库函数例程中的定时器中断为例:
-Timer
-USER ----------需要自己编程的地方,比如main()等
-HARDWARE ----------硬件的相关代码,比如定义LED1的初始化LED_init()
-SYSTEM ----------系统文件,比如系统的定时器
-CORE ----------控制器STM32的接口相关
-FWLiB ----------固件库函数相关
-README ----------使用的一些相关资料说明,版权等等,和Github里有点像
-USER
-main.c -------用户主函数,不多说
-stm32f10x_it.c -------编写中断服务函数,个人感觉意义不大
-system_stm32f10x.c -------设置系统以及总线时钟,有一个比较重要的函数SystemInit(),在系统启动时会调用,用于设置系统的时钟系统
-HARDWARE
-led.c --------LED IO初始化,定义哪一个LED工作
-key.c --------按键初始化
-timer.c --------定时器初始化,具体使用哪一个定时器
-SYSTEM
-delay.c -------实现系统的延时功能
-sys.c -------sys.h里定义了STM32的IO口输入读取宏定义和输出宏定义,sys.c只定义了一个中断分组,主要是通过头文件进行IO口的位操作,比如PAout(6)=1这种形式
-usart.c -------进行串口的初始化和中断接收
-CORE
-core_cm3.c -----提供进行M3内核接口,由ARM公司提供,不需要进行修改。
-startup_stm32f10x_hd.s -----芯片启动文件,适用于大容量(FLASH>256K)产品
-FWLib
-misc.c -----中断分组的相关固件库函数
-stm32f10x_gpio.c -----gpio的相关固件库函数
-stm32f10x_rcc.c -----复位和时钟控制器相关函数
-stm32f10x_tim.c -----定时器相关固件库函数
-stm32f10x_usart.c -----串口的相关固件库函数
-README
-README.TXT -----程序的相关说明以及版权介绍