OpenEdv-开源电子网

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

串口通信问题。。

[复制链接]

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-6-22 11:25:34 | 显示全部楼层 |阅读模式
最后问一次了,实在没办法,敬请海涵!
使用板一的串口一接收来自板二发来的数据(板二程序未知,只知道串口设置),板一串口一与板二串口设置一样。然后通过板一的串口二发出串口一接收到的数据,并在串口助手上显示。

因为板二发来的数据类型和长度和发送的时间间隔都未知,所以我在串口一中断函数里每接收到一个字节数据,就通过串口二发出来(这里程序我单独用串口二试过,在串口二中断函数里每接收一个字节,就通过串口二发出,串口助手显示正常,发送过快会可能导致部分数据丢失,但没有乱码)。测试结果是串口打印完全乱码

串口二程序单独测试没有问题,程序就不发出来了。

//串口一初始化配置
void Usart1_Init(u32 bound)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    // 使能时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

    // 串口一初始化复位
    USART_DeInit(USART1);

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;        
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;      
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         
    NVIC_Init(&NVIC_InitStructure);   
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;           //PA9 TX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;              //PA10 RX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉模式
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    USART_InitStructure.USART_BaudRate = bound;                 
    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_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收

    USART_Cmd(USART1, ENABLE);                               //′串口一使能
          USART_ClearFlag(USART1, USART_FLAG_TC);      //清除发送完成标志            
}

void USART1_IRQHandler()
{
        u8 Res;

        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
        {
                Res = USART_ReceiveData(USART1);       
                USART_SendData(USART2,Res);
        }
}      

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //中断分组

        LED_Init();                                                                          //PB8、PB9

        Usart2_init(2400);                                                            //PA2、PA3
        Usart1_Init(9600);                                                            //PA9、PA10


        LED1_ON;LED2_ON;
        while(1)        {; }
}         

在两块板子硬件和硬件连接没问题的情况下,什么会导致乱码?程序有没有问题
我用的是STM32F103ZET6,外部晶振8MHz
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-6-22 11:28:23 | 显示全部楼层
这是串口一,我配置RX为上拉输入,因为串口一没有接232芯片,没有单独测试串口一程序
QQ图片20180622110024.png
回复 支持 反对

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-6-22 11:33:15 | 显示全部楼层
帖子前两次没发成功,重写了两次,发送成功变分享了....
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 03:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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