当前位置:   article > 正文

将ESP8266连接OneNET+MQTT移植到HAL库+FreeRTOS_esp8266 freertos

esp8266 freertos

一、打开工程配置软件cubemx

1.选择芯片型号,这里使用的是STM32F103C8T6

2.因为后面工程要引入FreeRTOS,而FreeRTOS会占用SysTick时钟,所以这里的时钟源要选择其他的。

3.配置RCC

4.配置串口1和串口2

串口1用来打印信息,串口2用来调试ESP8266

使能串口1,波特率设为115200

使能中断

串口2也是这样配置的,这里就不在展示了,只需要使能串口2,设置波特率115200,使能串口2的中断即可。

5.配置FreeRTOS

选择CMSIS版本2,点击Add,设置事件名称、事件函数名、占用大小等等。

设置参数代表意思如下所示:

6.配置时钟树

7.配置工程基本信息
8.选择工程生成.h文件,最后点击cenerate code生成项目工程

二、打开工程

1.移植ESP8266相关文件,如下图APP文件中的4个.c文件

2.将串口2发送标准库函数换成HAL库中的串口发送函数

3.将延时函数换成HAL库中的延时函数,另外三个.c文件也是一样的操作

4.在stm32f1xx_it.c文件中,将串口2中断服务函数进行重写
  1. void USART2_IRQHandler(void)
  2. {
  3. /* USER CODE BEGIN USART2_IRQn 0 */
  4. unsigned int timeout=0;
  5. unsigned int maxDelay=0x1FFFF;
  6. /* USER CODE END USART2_IRQn 0 */
  7. HAL_UART_IRQHandler(&huart2);
  8. /* USER CODE BEGIN USART2_IRQn 1 */
  9. while (HAL_UART_GetState(&huart2)!=HAL_UART_STATE_READY)//等待就绪
  10. {
  11. timeout++;//超时处理
  12. if(timeout>maxDelay) break;
  13. }
  14. timeout=0;
  15. while(HAL_UART_Receive_IT(&huart2,&receivedByte2, 1)!=HAL_OK)
  16. {
  17. timeout++; //超时处理
  18. if(timeout>maxDelay) break;
  19. }
  20. if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; //防止串口被刷爆
  21. esp8266_buf[esp8266_cnt++] = receivedByte2;
  22. /* USER CODE END USART2_IRQn 1 */
  23. }
5.打开FreeRTOS.c文件,在这里就可以看到我们生成的事件名和事件函数名

然后找到生成的事件函数,添加事件进去,我这里在事件test01里面添加了打印的一个事件,在另外一个事件里面添加了数据上报的一个事件,注意这两个事件里面都必须包含osDelay延时函数,否则将无法进行事件堵塞,这样就不能进行任务间的调度切换。

三.效果展示图如下

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

闽ICP备14008679号