OpenEdv-开源电子网

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

关于STM32 串口助手发送USART接收乱码问题

[复制链接]

7

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2019-4-25
在线时间
74 小时
发表于 2020-1-10 11:19:57 | 显示全部楼层 |阅读模式
5金钱
main函数下
case 1:                //处理接收
        printf("0x%02X\r,0x%02X\n",RxBuffer[0],RxBuffer[1]);  //--返回接受到的
        if (RxBuffer[1] == 0x01){
           OpenTime();
        }else if (RxBuffer[1] == 0x02){
           CloseTime();
        }

USART设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

USART1_InitStructure.USART_BaudRate = 115200;
    USART1_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART1_InitStructure.USART_StopBits = USART_StopBits_1;
    USART1_InitStructure.USART_Parity = USART_Parity_No;
    USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART1_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    /* Configure USARTy */
    USART_Init(USART1, &USART1_InitStructure);
    /* Enable USARTy Receive and Transmit interrupts */
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    // USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
    USART_Cmd(USART1,ENABLE);

中断函数
void USART1_IRQHandler(void)        //向上
{
        int index = 0;
        //int sum = 0;
        if (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) != RESET)   //换成USART_IT_RXNE 也不行
        {
                Rxc = USART_ReceiveData(USART1);
                RxBuffer[index] = Rxc;
                index++;
        //        sum = sum + RxBuffer[k];
        //        k++;
        }
        if (RxBuffer[0] == 0xcc)
        {       
                Flag = 1;
        }
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);      //
}

使用串口助手发送16进制数时,主函数printf返回的字符串时0XCC 0X000X01 0X000X01 0X000X01 ......然后一直都这样,
我只发送一次的0xcc 0x01,为什么会多次进入接受中断,还是说我的RxBuffer没处理好?需要清0?但我是定义 RxBuffer[5]= {0};,有大佬帮一下吗?

最佳答案

查看完整内容[请看2#楼]

每接收到一个字节 都会进中断的 你代码仿真看看 单独只发一个字节的数据 看看也会重复进吗
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14407
金钱
14407
注册时间
2018-8-3
在线时间
1156 小时
发表于 2020-1-10 11:19:58 | 显示全部楼层
每接收到一个字节 都会进中断的 你代码仿真看看  单独只发一个字节的数据 看看也会重复进吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-19 22:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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