网站后台管理系统怎么用,免费手机网站源码下载,2020十大网络安全公司排名,线下营销推广方式有哪些文章目录 前言注意事项Cubemx配置printf重定向修改工程属性修改源码 测试函数 前言
最近学到了串口收发#xff0c;简单记录一下注意事项。
注意事项
Cubemx配置
以使用USART1为例。 USART1需配置成异步工作模式Asynchronous。 并且需要使能NVIC。
printf重定向
我偏向… 文章目录 前言注意事项Cubemx配置printf重定向修改工程属性修改源码 测试函数 前言
最近学到了串口收发简单记录一下注意事项。
注意事项
Cubemx配置
以使用USART1为例。 USART1需配置成异步工作模式Asynchronous。 并且需要使能NVIC。
printf重定向
我偏向于在stm32f1xx_it.c文件中对printf进行重定向重定向函数如下。
int fputc(int ch,FILE * fp)
{HAL_UART_Transmit(huart1,(uint8_t * )ch,1,0xffff);return ch;
}同时需包含头文件路径#include “stdio.h”
修改工程属性
在工程属性Target下勾选Use MicroLIB。
至此可以由printf语句经USART1发送数据了。
修改源码
添加变量定义 /* USER CODE BEGIN Private defines */
#define USART_REC_LEN 200
#define RXBUFFERSIZE 1
extern uint16_t USART_RX_STA;
extern uint8_t USART_RX_BUF[USART_REC_LEN];
extern uint8_t aRxBuffer[RXBUFFERSIZE];
/* USER CODE END Private defines */在Cubemx生成的串口初始化函数MX_USART1_UART_Init增加如下语句
HAL_UART_Receive_IT(huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE);
在stm32f1xx_it.c文件中添加如下函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart-InstanceUSART1)//{if((USART_RX_STA0x8000)0)//{if(USART_RX_STA0x4000)//{if(aRxBuffer[0]!0x0a)USART_RX_STA0;//else USART_RX_STA|0x8000; //}else //{ if(aRxBuffer[0]0x0d)USART_RX_STA|0x4000;else{USART_RX_BUF[USART_RX_STA0X3FFF]aRxBuffer[0] ;USART_RX_STA;if(USART_RX_STA(USART_REC_LEN-1))USART_RX_STA0;//} }}}
}在stm32f1xx_it.c文件中找到USART1_IRQHandler并修改为如下函数
void USART1_IRQHandler(void)
{uint32_t timeout0;/* USER CODE BEGIN USART1_IRQn 0 *//* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(huart1);/* USER CODE BEGIN USART1_IRQn 1 */timeout0;while (HAL_UART_GetState(huart1) ! HAL_UART_STATE_READY)//{timeout;//if(timeoutHAL_MAX_DELAY) break; }timeout0;while(HAL_UART_Receive_IT(huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) ! HAL_OK)//Ò»´Î´¦ÀíÍê³ÉÖ®ºó£¬ÖØÐ¿ªÆôÖжϲ¢ÉèÖÃRxXferCountΪ1{timeout; //³¬Ê±´¦Àíif(timeoutHAL_MAX_DELAY) break; }/* USER CODE END USART1_IRQn 1 */
}测试函数
while (1){uint8_t len0;static uint16_t times 0;printf(%d\r\n,times);HAL_Delay(500);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);if(USART_RX_STA0x8000){ lenUSART_RX_STA0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶Èprintf(\r\nÄú·¢Ë͵ÄÏûϢΪ:\r\n);HAL_UART_Transmit(huart1,(uint8_t*)USART_RX_BUF,len,1000); //·¢ËͽÓÊÕµ½µÄÊý¾Ýwhile(__HAL_UART_GET_FLAG(huart1,UART_FLAG_TC)!SET); //µÈ´ý·¢ËͽáÊøprintf(\r\n\r\n);//²åÈë»»ÐÐUSART_RX_STA0;}else{if(times%200)printf(ÇëÊäÈëÊý¾Ý,ÒԻسµ¼ü½áÊø\r\n); if(times%20);//LED0!LED0;//ÉÁ˸LED,ÌáʾϵͳÕýÔÚÔËÐÐ.} /* USER CODE END WHILE *//* USER CODE BEGIN 3 */}