一、打开工程配置软件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中断服务函数进行重写
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
unsigned int timeout=0;
unsigned int maxDelay=0x1FFFF;
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_IRQn 1 */
while (HAL_UART_GetState(&huart2)!=HAL_UART_STATE_READY)//等待就绪
{
timeout++;//超时处理
if(timeout>maxDelay) break;
}
timeout=0;
while(HAL_UART_Receive_IT(&huart2,&receivedByte2, 1)!=HAL_OK)
{
timeout++; //超时处理
if(timeout>maxDelay) break;
}
if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; //防止串口被刷爆
esp8266_buf[esp8266_cnt++] = receivedByte2;
/* USER CODE END USART2_IRQn 1 */
}
5.打开FreeRTOS.c文件,在这里就可以看到我们生成的事件名和事件函数名
然后找到生成的事件函数,添加事件进去,我这里在事件test01里面添加了打印的一个事件,在另外一个事件里面添加了数据上报的一个事件,注意这两个事件里面都必须包含osDelay延时函数,否则将无法进行事件堵塞,这样就不能进行任务间的调度切换。