OpenEdv-开源电子网

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

新手上路,在整串口通信时出现异常

[复制链接]

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-9-11
在线时间
31 小时
发表于 2020-12-1 11:29:57 | 显示全部楼层 |阅读模式
1金钱
使用串口助手向STM32发送数,STM32收到后将其显示在数码管上,并发送回PC,现在数据无法显示在数码管,程序如下:display.c
#include "display.h"
#include "delay.h"
void Display_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);
}
void seg(u8 m)
{
        switch(m)
        {
                case 0:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);               
                break;
                case 1:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);                                       
                break;
                case 2:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6);                                       
                break;
                case 3:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6);                                       
                break;
                case 4:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6);
                break;
                case 5:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6);
                break;
                case 6:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                break;
                case 7:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
                break;
                case 8:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                break;
                case 9:
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
                        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6);
                break;               
        }
}
void display(u16 num)
{
        u8 s,g;
        s=num/10;
        g=num%10;
        GPIO_SetBits(GPIOA,GPIO_Pin_7);
        GPIO_ResetBits(GPIOA,GPIO_Pin_8);
        GPIO_SetBits(GPIOA,GPIO_Pin_7);
        seg(s);
        delayms(1);
        GPIO_ResetBits(GPIOA,GPIO_Pin_7);
        GPIO_SetBits(GPIOA,GPIO_Pin_8);
        seg(g);
        delayms(1);       
}

usart.c


#include "usart.h"
void Usart_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStruct;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);                //使能GPIOA和USART1时钟
       
        USART_DeInit(USART1);                                        //串口复位
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;                        //全双工模式时,设定PA.9为推挽复用输出
        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;                        //全双工模式时,设定PA.10为浮空输入或上拉输入,这里设置为浮空输入。
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
               
        USART_InitStruct.USART_BaudRate=9600;                        //设置USART1的波特率
        USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;        //无硬件数据流控制
        USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;        //收发模式
        USART_InitStruct.USART_Parity=USART_Parity_No;                                //无奇偶校验位
        USART_InitStruct.USART_StopBits=USART_StopBits_1;                        //1个停止位
        USART_InitStruct.USART_WordLength=USART_WordLength_8b;                //字长为8的数据格式
        USART_Init(USART1,&USART_InitStruct);                                                //初始化串口
       
        USART_Cmd(USART1,ENABLE);                        //使能串口
}


main.c

#include "delay.h"
#include "display.h"
#include "usart.h"
int main(void)
{
        u8 sum=0;
        Usart_Init();
        Display_Init();
        while(1)
        {
                sum=USART_ReceiveData(USART1);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==SET);
                USART_SendData(USART1,3);
                while(!(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET));
                display(sum);
        }
}




WeChat 截圖_20201201112856.png

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

使用道具 举报

0

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2017-2-13
在线时间
125 小时
发表于 2020-12-1 11:50:15 | 显示全部楼层
读写的中断标志弄反了吧
回复

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-9-11
在线时间
31 小时
 楼主| 发表于 2020-12-1 13:03:03 | 显示全部楼层
492393275 发表于 2020-12-1 11:50
读写的中断标志弄反了吧

没加中断
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4947
金钱
4947
注册时间
2015-1-10
在线时间
620 小时
发表于 2020-12-1 13:10:30 | 显示全部楼层
串口助手改成hex收发,你用ASC收发的话你发1,其实单片机收到的时0x31,自己debug看看
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 12:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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