stm32之HAL库函数的使用
HAL 库函数的使用
关于 HAL 库,我们通过 cubeMX 可以完成初始化等代码生成,极大的提高了 stm32 的使用效率.但是重要的函数,还是需要我们自己掌握,这里首先学习 hal 库函数的使用.之后抽空对 cubeMX 进行细致的了解.
GPIO
gpio 是 stm32 里基本的功能,其中经常使用的函数如下:
翻转电平
HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
用来 控 制 LED 的亮灭。
读取引脚电平状态
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
该函数可以返回状态值 0 或 1.
写入引脚电平状态
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
功能与读取相反
UART
串口发送数据
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
用来将数据发送给其他设备,所需要的参数包括串口位置、字符串位置,个数,以及最大传输字节。
串口中断模式接收函数
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
参数包括串口位置、字符串存放位置、个数。在读入指定个数的数据之后串口中断,触发 IRQHandler 函数.
由于这是接收中断,故 IRQHandler 函数处理后调用串口接收中断回调函数(此函数需要自己配置)
串口接收中断回调函数
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
在此附上例子:
1 | void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) |
一种小技巧:重写 fget 和 fput 函数
需要注意,在 keil5 中,点开魔法棒,将 use MicroLIB 打勾
1 | //方法一 |
修改之后,我们就可以直接使用 scanf 和 printf 来实现 pc 与 stm32 的通信.
TIM
这里的配置一般都是系统配置,需要到 MX 中进行修改~
DAC
DAC 是数模转换,可用于制作 DDS 信号发生器,以及将数字信号转换为模拟信号。
触发方式分为三种,分别是定时器触发,外部引脚触发,软件控制.
结合 DMA 可以做到生成任意波形,具体代码如下:
1 | HAL_TIM_Base_Start(&htim6); |
此代码中定义了一个名叫 sine 的数组,将数组通过 DMA 传递,从而转化为模拟信号.
1 | //正弦函数的波形数据 |
教程可见视频: STM32_DAC
ADC
模数转换,通常用于采样波形进行分析.
使用 DMA 的相关代码:HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcBuffer, SAMPLES);
对于 ADC 来说,最重要的是学会配置 MX.
特别是时钟的配置比较重要,事关采样频率的计算.
注意选择时钟触发,这样才能确保采样的准确度.
详见:STM32HAL ADC+TIM+DMA 采集交流信号 基于 cubemx_tim+adc+dma-CSDN 博客
DSP
首先需要在 cubeMX 中寻找 DSP_library 下载,其次还需要进入 keil 后将包含<arm_math.h>的目录添加到路径中.添加有关的宏文件,还要注意将<arm_cortexM4lf_math.lib>也添加到项目中,这样就能正常使用 DSP 的相关库函数了.
可以参考:STM32 DSP 库的添加 - 上帝的绵羊 - 博客园 (cnblogs.com)
WDG
全称 watchdog(看门狗),用于检测系统运行状态并及时做出反馈.共分为两种.
IWDG(独立看门狗)
独立看门狗采用内部时钟,独立于系统时钟,按照分频和窗口值得出间隔的时间.
在间隔时间内不执行喂狗函数,就会自动 reset
1 | //喂狗函数 |
WWDG(窗口看门狗)
窗口看门狗规定必须要在指定的时间内喂狗,过早或者过晚都会导致 reset.
如果要使用,需要把中断(NVIC SETTINGS)打开 Enabled
原理是在计数器快要溢出时,看门狗触发一次中断,在中断回调函数里进行喂狗即可.
因此添加如下函数:
1 | void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg) |