OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3598|回复: 2

stm32串口收发数据不一致该如何解决

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2021-11-8
在线时间
0 小时
发表于 2021-11-8 20:39:34 | 显示全部楼层 |阅读模式
本帖最后由 giogiogio 于 2021-11-8 20:40 编辑

在用stm32f103c8t6进行串口实验时,实现简单上位机发送数据,单片机接收数据并将该数据返回,程序写完后在串口调试助手中,能够正常发送数据和接收数据,但接收数据与发送数据不一致,如下图所示,想问问大佬该如何解决?

附代码:
#include "stm32f10x.h"


void My_USART_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  //使能GPIOA时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);  //使能串口A时钟
       
        //初始化PA9引脚
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        //初始化PA10引脚
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        //串口初始化
        USART_InitStructure.USART_BaudRate=115200;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_Init(USART1,&USART_InitStructure);
       
        //使能串口1
        USART_Cmd(USART1,ENABLE);
       
        //开启接收中断
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
       
        //初始化中断响应优先级
        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);
}


//中断服务子函数
void USART1_IRQHandler(void)
{
        u8 res;  //定义接收数据变量
        if(USART_GetITStatus(USART1,USART_IT_RXNE))
        {
                res=USART_ReceiveData(USART1);  //接收数据并将数据存储
                USART_SendData(USART1,res);  //将接收到的数据发送
        }
}

int main(void)
{       
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置中断优先级分组为2
  My_USART_Init();
        while(1);
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1734
金钱
1734
注册时间
2021-4-11
在线时间
320 小时
发表于 2021-11-9 10:02:51 | 显示全部楼层
清除中断标志位看一下
回复 支持 反对

使用道具 举报

11

主题

2156

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4973
金钱
4973
注册时间
2015-1-10
在线时间
623 小时
发表于 2021-11-9 10:10:57 | 显示全部楼层
你在接收中断里发送很可能会丢失数据的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-4 04:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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