野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4335|回复: 1

USART串口通信出现错误信息

[复制链接]
发表于 2022-11-19 16:44:15 | 显示全部楼层 |阅读模式
本帖最后由 加贺 于 2022-11-19 16:51 编辑

USART GPIO 配置函数USART_config里 把打开外设USART的时钟放在GPIO配置后,输出结果有事会出现错误为什么?

我更改了USART外设使能语句的位置,调整到了配置玩GPIO代码后。
// 打开串口外设的时钟
DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
USART_config函数如下

复制代码
  1. /**
  2.   * @brief  USART GPIO 配置,工作参数配置
  3.   * @param  无
  4.   * @retval 无
  5.   */
  6. void USART_Config(void)
  7. {
  8.         GPIO_InitTypeDef GPIO_InitStructure;
  9.         USART_InitTypeDef USART_InitStructure;

  10.         // 打开串口GPIO的时钟
  11.         DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
  12.         /*
  13.         //这里配套例程放的位置,注释掉了
  14.         // 打开串口外设的时钟
  15.         DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);       
  16.   */


  17.         // 将USART Tx的GPIO配置为推挽复用模式
  18.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
  19.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  20.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  21.         GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  22.   // 将USART Rx的GPIO配置为浮空输入模式
  23.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
  24.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  25.         GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);


  26.         //这里里我放的位置
  27.         // 打开串口外设的时钟
  28.         DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);





  29.         // 配置串口的工作参数
  30.         // 配置波特率
  31.         USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
  32.         // 配置 针数据字长
  33.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  34.         // 配置停止位
  35.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  36.         // 配置校验位
  37.         USART_InitStructure.USART_Parity = USART_Parity_No ;
  38.         // 配置硬件流控制
  39.         USART_InitStructure.USART_HardwareFlowControl =
  40.         USART_HardwareFlowControl_None;
  41.         // 配置工作模式,收发一起
  42.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  43.         // 完成串口的初始化配置
  44.         USART_Init(DEBUG_USARTx, &USART_InitStructure);
  45.        
  46.         // 串口中断优先级配置
  47.         NVIC_Configuration();
  48.        
  49.         // 使能串口接收中断
  50.         USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);       
  51.        
  52.         // 使能串口
  53.         USART_Cmd(DEBUG_USARTx, ENABLE);            
  54. }
复制代码



main函数里面只写了发送0xccdd。代码如下。
  1. int main(void)
  2. {        
  3.   /*初始化USART 配置模式为 115200 8-N-1,中断接收*/
  4.   USART_Config();
  5.         Usart_SendHalfWord( DEBUG_USARTx, 0xccdd);
  6.         /* 发送一个字符串 */
  7.         //Usart_SendString( DEBUG_USARTx,"这是一个串口中断接收回显实验\n");
  8.         //printf("欢迎使用野火STM32开发板\n\n\n\n");
  9.         
  10.   while(1)
  11.         {        
  12.                
  13.         }        
  14. }
复制代码
多次按复位键后有可能会多发送一个错误信息FF。结果如下

错误结果图

错误结果图





回复

使用道具 举报

发表于 2022-11-29 08:50:57 | 显示全部楼层
程序流程问题吧,先配置时钟,再配置相应Io
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-19 18:39 , Processed in 0.068533 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表