一、什么是HAL库
通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般有使用标准库、HAL库和直接配置寄存器进行开发。HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴。
二、stm32CubeMX的安装
到下面的网站去下载安装包,安装jdk环境,因为STM32CubeMX是Java实现的。根据自己的实际情况选择版本。
https://www.oracle.com/java/technologies/downloads/
到下面的网站下载安装包,安装stm32CubeMX,根据自己的实际情况选择版本。一直点击next
就可以了。
https://www.st.com/en/development-tools/stm32cubemx.html
运行stm32CubeMX,按照图示步骤安装固件库。
选择对应的芯片型号STM32F1,选择1.60版本,点击install now
。
安装完成后就可以进行STM32的开发了。
三、点亮流水灯
1.具体步骤
1)点击file
,新建工程,选择芯片型号STM32F103C8
,开始工程。
2)点击Pinout &Configuration
,配置系统调试接口SYS
,选择 Serial Wire
。
外设资源选项:MCU的外设资源按A-Z排序,供用户选择使用。
外设设置:这里可以选择外设的各种功能。
引脚预览和系统预览:查看配置的各种外设的状态。只是两者的表达方式不同。引脚的颜色不同和不同图标都代表着不同的状态。
3)配置外设RCC
,默认使用的内部RC振荡器。选择 HSE
为 Crystal/Ceramic Resonator
(晶振/陶瓷谐振器),使用外部时钟源。
4)点击Cook Configuration
,按照下面的数值调整时钟树。
5)点击Pinout &Configuration
,点击GPIO
,在引脚预览图上点击要配置的引脚以及要配置的功能,此处选GPIO_Output
。最后在中间的输出模式将Low
改为High
。
依次配置PA5、PB0、PC14引脚。
6)点击Project Manager
,配置工程文件。
4处一定要更改为与安装的Keil的版本一致的,否则利用keil分析串口输出的波形时将无法观测,出现no signal。
勾选 Generate peripheral
,将单独生成所配置外设的.c和.h文件。点击GENERATE CODE
,将生成工程代码。
7)点击Open Project
,即可在Keil上打开工程。
8)在main.c的while循环中添加以下代码,实现LED的周期性闪烁。下面用到了HAL库里的函数。
void HAL_Delay (__IO uint32_t Delay)
参数说明:Delay表示所要延时的时间大小,单位是毫秒。
void HAL_GPIO_WritePin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin,GPIO_PinState PinState)
参数说明:GPIOx: 管脚组(x的取值为A~G);
GPIO_Pin: 管脚编号(x的取值为0~15);
PIN_State: 管脚的状态
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
//写管脚函数,置0
HAL_Delay(100) ;//延时函数,单位是毫秒
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
HAL_Delay(100) ;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_Delay(100) ;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_Delay(100) ;
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);
HAL_Delay(100) ;
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);
HAL_Delay(100) ;
}
9)编译运行,将生成的hex文件烧录进去芯片中,然后把电路接出来。
2.结果
四、管脚波形分析
1)点击魔法棒
,点击Target
,设置晶振的频率为72HZ。
点击Debug
,勾选仿真器,根据自己使用的芯片型号修改下列框选的部分。
进入调试界面,点击逻辑分析仪,点击view
,调出Symbol Window
。
在Symbol窗口中展开Special Function Registers
,分别将GPIOA_IDR、GPIOB_IDR、GPIOC_IDR拖进逻辑分析仪。
点击逻辑分析仪的左上角Setup
选项,将3个管脚设置展示类型为Bit
。
点击页面左上角的 Run 进行全速运行,运行一端时间后停止,滑动鼠标,可以看到3个GPIO端口的管脚波形。
从上面的波形可以看出,LED 的闪烁周期实际约为60ms(约三格,每格为2ms),与定义的100ms有差距。这样的时序波形符合流水灯的状态转换。
五、总结
stm32CubeMX允许我们使用图形化向导生成C 初始化代码,不像以前编程时需要经常翻阅手册,省去了我们配置各种外设的时间,大大的节省了时间。但是我们还是要从基本的外设原理开始学起,一步步打好基础操作的时候才知道从哪里下手。而根据仿真示波器的波形,即使在不接硬件的情况下,也可以判断代码是否正常,这可为我们调试带来了极大的便利。