当前位置:   article > 正文

STM32CubeMx_HAL库使用_1_定时器与串口_stm32 htim->instance

stm32 htim->instance

 

1、TIM

学习TIM中,需要注意的是,利用STM32CubeMX配置完成后,在while之前需要加

HAL_TIM_Base_Start_IT(&htim3); //启动定时器

启动定时器,括号内是你配置定时器的句柄。

定时器这一块可以不用去管定时器服务中断函数,直接在主函数后面增加

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

这个函数使用就可以,利用

  1. if(htim->Instance == htim3.Instance) //10ms运行一次
  2. {
  3. ++TimeFlag;
  4. }

if(htim->Instance == htim3.Instance) 这句判断是否到你的定时器,htim3.Instance中htim3是你的定时器句柄,根据你的实际定义修改。if大括号里面写你要运行的东西;

2、usart

 学习usart中 ,需要注意的几点:

1.利用STM32CubeMX配置完成后,需要在while之前增加

HAL_UART_Receive_IT(&huart1, (uint8_t *)USART1_aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量

来开启usart接收,第一个参数是usart的句柄,第二个参数是HAL库需要的一个缓存数组,第三个参数是缓存数组的长度,我都一般定义为1;

2.在usart的中断函数值做如下操作,可以使串口一直接收数据,

 

  1. void USART1_IRQHandler(void)
  2. {
  3. /* USER CODE BEGIN USART1_IRQn 0 */
  4. uint32_t timeout=0;
  5. /* USER CODE END USART1_IRQn 0 */
  6. HAL_UART_IRQHandler(&huart1);
  7. /* USER CODE BEGIN USART1_IRQn 1 */
  8. timeout=0;
  9. while (HAL_UART_GetState(&huart1) != HAL_UART_STATE_READY)//等待就绪
  10. {
  11. timeout++;超时处理
  12. if(timeout>HAL_MAX_DELAY) break;
  13. }
  14. timeout=0;
  15. while(HAL_UART_Receive_IT(&huart1, (uint8_t *)USART1_aRxBuffer, RXBUFFERSIZE) != HAL_OK)//一次处理完成之后,重新开启中断并设置RxXferCount为1
  16. {
  17. timeout++; //超时处理
  18. if(timeout>HAL_MAX_DELAY) break;
  19. }
  20. /* USER CODE END USART1_IRQn 1 */
  21. }

 

 

3.串口接收部分,如定时器类似,在这里直接处理你接收到的数据,我是用判断\r\n的方法来判断串口接收完毕的,代码如下,经供参考:(当然,你也可以使用时间来判断接收完毕,比较常用的是判断10ms没接收到数据就代表接收完毕,百度有参考代码)

  1. //串口1接收函数
  2. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  3. {
  4. if(huart->Instance==USART1)//如果是串口1
  5. {
  6. USART1_BUFF[USART1_ReceiveLength]=USART1_aRxBuffer[0];
  7. if(USART1_BUFF[USART1_ReceiveLength]== 0x0a)//\n
  8. {
  9. if(USART1_BUFF[USART1_ReceiveLength-1] == 0x0d)//\r
  10. {
  11. USART1_ReceiveEndFlag=USART1ReceiveOk;//接收完成
  12. }
  13. }
  14. else
  15. {
  16. ++USART1_ReceiveLength;
  17. }
  18. }
  19. }

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/912967
推荐阅读
相关标签
  

闽ICP备14008679号