串口通信
1 2 3 4
| char buf[100]; printf("\r\nYour name: "); scanf("%s", buf); printf("\r\nHello, %s!\r\n", buf);
|
使能串口
1 2
| __HAL_RCC_USB_CLK_ENABLE(); //开启串口 __HAL_RCC_USB_CLK_DISABLE(); //关闭串口
|
使能串口中断
1
| HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| · HAL_UART_Transmit();串口发送数据,使用超时管理机制 · HAL_UART_Receive();串口接收数据,使用超时管理机制 · HAL_UART_Transmit_IT();串口中断模式发送 · HAL_UART_Receive_IT();串口中断模式接收 · HAL_UART_Transmit_DMA();串口DMA模式发送 · HAL_UART_Transmit_DMA();串口DMA模式接收 · HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数 · HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //串口发送中断回调函数 · HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口发送一半中断回调函数(用的较少) · HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //串口接收中断回调函数 · HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//串口接收一半回调函数(用的较少) · HAL_UART_ErrorCallback();串口接收错误函数
|
端口控制
写入
1
| HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
|
读取
1
| GPIO_PinState pc13pinstate = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13);
|
注意
需要将对应的端口上下拉
中断
mode设置
GPIO_MODE_IT_RISING(外部中断上升沿触发)GPIO_MODE_IT_FALLING(外部中断下降沿触发)
GPIO_MODE_IT_RISING_FALLING(外部 中断双边沿触发)
__weak修饰
1
| __weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
表示可以重写
看门狗
看门狗溢出时间=(分频值×重装值)/ IWDG时钟频率
(图中设置4×4095/32000=0.51s)

img
喂狗
1
| HAL_IWDG_Refresh(&hiwdg); //在主程序循环中进行喂狗
|
看门狗区别
独立看门狗(IWDG) |
窗口看门狗(WWDG) |
专用的低速时钟(LSI)驱动,能够完全独立工作 |
APB1时钟分频后得到时钟驱动 |
避免程序跑飞,死循环,对时间精度要求低的场合 |
适合那些要求看门狗在精确计时窗口起作用的程序 |
没有中断,直接复位 |
有中断,可做复位前操作 |
计数值<重装值,喂狗 |
0x40<计数值<窗口值,喂狗 |
定时器
开启中断
1 2 3 4 5 6 7 8 9 10
| HAL_TIM_Base_Start_IT(&htim2);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM2) { //用户代码 } }
|
PWM
普通定时器
1
| HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
|
1 2
| __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,500);
|
高级定时器
- 当Channel1选择 PWM Generation CH1时,使用的函数同普通定时器一样
1
| HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
|
1 2 3 4
| __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,500); __HAL_TIM_GET_COMPARE也是一个宏定义。
|
- 当Channel1选择 PWM Generation CH1N时,需改变启动函数
1
| HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
|
- 当Channel1选择 PWM Generation CH1N时,使用(1)(2)中的函数,此时,会生成两路互补的PWM,
1 2
| HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
|
编码器
1
| HAL_TIM_Encoder_Start(&htim4,TIM_CHANNEL_1 | TIM_CHANNEL_2);
|
使用HAL读取编码器数值
1 2 3 4 5 6
| int Direction = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim4); int CaptureNumber = (short)__HAL_TIM_GET_COUNTER(&htim4); __HAL_TIM_GET_COUNTER(&htim4) = 0; ———————————————— 版权声明:本文为CSDN博主「杰尼君」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https:
|
使用寄存器读取编码器数值
1 2
| int CaptureNumber= (short)TIM4 -> CNT; //读取定时器2的计数值 TIM4 -> CNT=0; //清零计数
|
输入捕获
【STM32】HAL库 STM32CubeMX教程八—定时器输入捕获_Z小旋的博客-CSDN博客_hal库读取定时器的计数值
1 2 3 4 5 6
| HAL_TIM_IC_Start_IT() HAL_TIM_IC_Stop_IT() __HAL_TIM_SET_CAPTUREPOLARITY
|
回调函数
1
| void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
|
#stm32 #HAL