你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F7学习笔记(二)-串口

[复制链接]
STMCU小助手 发布时间:2021-12-10 11:09
一,打开cubemx,配置时钟等参数,具体操作方法和上一节一样
二,配置串口1
在cubemx上打开串口1,并设置波特率,其他参数保持默认,配置完成如下图所示:

20190409203849508.png


三,打开串口中断
点击NVIC SETTING,勾选相应选项如下图

20190409204018292.png


四、生成代码,具体方法与上节一样
1、在usart.c中添加如下代码:

  1.     uint8_t aRecBuff[1];
  2.     uint8_t Uart1Buff[REC_LEN];
  3.     uint16_t USART_RX_STA=0;      
  4.     int fputc(int ch, FILE *f)//printf的重映射
  5.     {
  6.             HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  7.             return ch;
  8.     }
复制代码

2、 添加中断回调函数(参考正点原子函数接收方法)
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2.     {
  3.             if(huart->Instance == USART1)
  4.             {
  5.                     if((USART_RX_STA&0x8000)==0)//接收未完成
  6.                     {
  7.                             if(USART_RX_STA&0x4000)//接收到了0x0d
  8.                             {
  9.                                     if(aRecBuff[0]!=0x0a)USART_RX_STA=0;//接收错误,重新开始
  10.                                     else USART_RX_STA|=0x8000;        //接收完成了
  11.                             }
  12.                             else //还没收到0X0D
  13.                             {        
  14.                                     if(aRecBuff[0]==0x0d)USART_RX_STA|=0x4000;
  15.                                     else
  16.                                     {
  17.                                             Uart1Buff[USART_RX_STA&0X3FFF]=aRecBuff[0] ;
  18.                                             USART_RX_STA++;
  19.                                             if(USART_RX_STA>(REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收         
  20.                                     }                 
  21.                             }
  22.                     }
  23.             }
  24.     }
复制代码


3、在stm32f7xx_it.c文件中的void USART1_IRQHandler(void)函数中添加如下代码,以保证进入串口中断后再次开启接收中断,添加完成的代码如下:

  1. void USART1_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN USART1_IRQn 0 */

  4.   /* USER CODE END USART1_IRQn 0 */
  5.   HAL_UART_IRQHandler(&huart1);
  6.   /* USER CODE BEGIN USART1_IRQn 1 */
  7.         HAL_UART_Receive_IT(&huart1,aRecBuff,1);
  8.   /* USER CODE END USART1_IRQn 1 */
  9. }
复制代码


4、在主函数中添加代码开启串口接收中断

  1. HAL_UART_Receive_IT(&huart1,aRecBuff,1);
复制代码

5、在主循环添加代码,串口接收完成后,打印接收的内容(注;串口发送的内容需以换行符结尾),更改完成的主函数如下所示:

  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */

  5.   /* Enable I-Cache---------------------------------------------------------*/
  6.   SCB_EnableICache();

  7.   /* Enable D-Cache---------------------------------------------------------*/
  8.   SCB_EnableDCache();

  9.   /* MCU Configuration--------------------------------------------------------*/

  10.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  11.   HAL_Init();

  12.   /* USER CODE BEGIN Init */

  13.   /* USER CODE END Init */

  14.   /* Configure the system clock */
  15.   SystemClock_Config();

  16.   /* USER CODE BEGIN SysInit */

  17.   /* USER CODE END SysInit */

  18.   /* Initialize all configured peripherals */
  19.   MX_GPIO_Init();
  20.   MX_USART1_UART_Init();
  21.   /* USER CODE BEGIN 2 */
  22.         HAL_UART_Receive_IT(&huart1,aRecBuff,1);
  23.         printf("uart test is run!!!\r\n");
  24.   /* USER CODE END 2 */

  25.   /* Infinite loop */
  26.   /* USER CODE BEGIN WHILE */
  27.   while (1)
  28.   {
  29.     /* USER CODE END WHILE */

  30.     /* USER CODE BEGIN 3 */
  31.           if(USART_RX_STA&0x8000)
  32.           {
  33.           printf("recdata is :%s\r\n",Uart1Buff);
  34.           USART_RX_STA=0;
  35.           memset(Uart1Buff,0,REC_LEN);
  36.           }
  37.   }
  38.   /* USER CODE END 3 */
  39. }
复制代码

如果编译memset出错,则添加string.h头文件即可。

五,编译下载,打开串口调试助手观察现象
开机系统打印uart test is run!!!,向串口发送“这是一个串口实验”,则在串口就会显示“recdata is :这是一个串口实验"注:发送新行需要勾选)
20190409205255176.png




收藏 评论0 发布时间:2021-12-10 11:09

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版