OpenEdv-开源电子网

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

407 ZGT6 串口数据接收数据错乱

[复制链接]

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2019-9-16
在线时间
24 小时
发表于 2020-5-13 11:13:00 | 显示全部楼层 |阅读模式
15金钱
F407ZGT6的板子,串口1接收数据时很奇怪,串口1自发自收,发送0XAA,0X55,0XBB,0XCC收到的数据很奇怪。
55bbcccc                     打印出来是这个样子。我的程序问题在哪?大佬帮忙看一下,还有一个问题,官方的407例程用我们公司板子,一个都启不起来,很奇怪。

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55

ccaa55bb

55bbcccc

bbccccaa

ccccaa55



void USART1_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef  NVIC_InitStructure;
        USART_ClockInitTypeDef USART_ClockInitStructure;

        /* 第1步:打开GPIO和USART部件的时钟 */
       

        RCC_AHB1PeriphClockCmd(UART1_GPIO_RCC, ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);
       
   GPIO_PinAFConfig(UART1_GPIO, UART1_TX_PIN_SOURCE, GPIO_AF_USART1);
   GPIO_PinAFConfig(UART1_GPIO, UART1_RX_PIN_SOURCE, GPIO_AF_USART1);
       

        GPIO_InitStructure.GPIO_Pin = UART1_GPIO_TX ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = UART1_GPIO_RX;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);


        USART_InitStructure.USART_BaudRate = 115200;//  115200
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;//设置校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART1, &USART_InitStructure);
        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
        USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
        USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
        USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
        USART_Init(USART1, &USART_InitStructure);
        /* 第5步:使能 USART, 配置完毕 */
        USART_ClockInit(USART1, &USART_ClockInitStructure);
        USART_Cmd(USART1, ENABLE);

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;        //USART3全局中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//设置USART1在NVIC_IRQChannel中的抢占优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //设置USART1在NVIC_IRQChannel中的响应优先级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //USART1中断使能
        NVIC_Init(&NVIC_InitStructure);


        USART_ClearFlag(USART1, USART_FLAG_TC);  
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

}

/*******************************************************************************
* Function Name  : USARTx_IRQHandler
* Description    : This function handles USART1 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USART1_IRQHandler(void)
{
        extern u8 UART1_RxBuffer[32];

        static u16 Rx1Count=0;
        if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
        {
                (uint16_t)(USART1->DR & (uint16_t)0x01FF);

        }  

        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {   
                UART1_RxBuffer[Rx1Count++] = USART_ReceiveData(USART1);         
                if(Rx1Count > RxLen)
                {
                        Rx1Count = 0x00;
                        Uart1RxFlag=1;
                }

                USART_ClearFlag(USART1, USART_FLAG_RXNE);
        }

}

最佳答案

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

这个中断实在发现不了问题在哪l ,我采用DMA,数据接收正常了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2019-9-16
在线时间
24 小时
 楼主| 发表于 2020-5-13 11:13:01 | 显示全部楼层
这个中断实在发现不了问题在哪l ,我采用DMA,数据接收正常了。
回复

使用道具 举报

0

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2020-5-6
在线时间
0 小时
发表于 2020-5-13 11:13:02 | 显示全部楼层
帮顶,大家来帮忙解答一下。。
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7462
金钱
7462
注册时间
2015-1-15
在线时间
1367 小时
发表于 2020-5-13 17:16:35 | 显示全部楼层
检查自己的中断接收数据处理是否合理
RxLen不自己检查是否是否控制正常
一分耕耘一分收获。
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2020-5-13 19:46:21 来自手机 | 显示全部楼层
6路串口一路GPIO模拟串口,没见什么问题!不过我用的TC中断
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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