OpenEdv-开源电子网

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

串口发送接收问题

[复制链接]

4

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-1-10
在线时间
28 小时
发表于 2017-1-19 16:27:24 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 zhihuan93 于 2017-1-19 16:31 编辑

用一个stm32单片机(A)给另一个单片机(B)发送数据,另一个单片机(B)工作机制为 接收到什么数据就发送什么数据(程序已经写好)。
我给单片机A写程序,目的是发送(TX)过去一个字符,然后收到(RX)一个字符。

我用在线调试接收数据。
遇到的问题: 接收不到返回的数据




附上代码:
main.c
[mw_shl_code=c,true]int main(void)
{
USART_ConfigForCom_TX();//串口配置
while(1)
        {
                printf("\nsend: ");
                USART_SendData(USART1,0x55);
                while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//每发送一次都要检查发送完成否

                for(m=0;m<=10000;m++)               
                        for(n=0;n<=100;n++)
                        {
                        ;
                        }        
                printf("\n");                        
        }
}[/mw_shl_code]
中断函数:
[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
        int Re;
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!= RESET)                  //确保是接收中断发生
        {
                WKUP_PIN(HIGH); //点亮led      
                Re=USART_ReceiveData(USART1);
                USART_SendData(USART1,Re);//将数据返回到在线调试的uart1上打印出来
                while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);              
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);                //清接收中断标志位
        }
}[/mw_shl_code]

串口配置:
[mw_shl_code=c,true]void USART_ConfigForCom_TX(void)
{
        //定义GPIO,,NVIC,USART结构体
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        //开PA口复用时钟,初始化系统时钟
        SystemInit();
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
        //配置PA9即USART1_TX_
        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);


        //配置PA10即USART1_RX
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        //进行USART1的中断配置
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);


        //配置USART1
        USART_InitStructure.USART_BaudRate=9600;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_Init(USART1,&USART_InitStructure);
        
         //开USART1中断触发方式为接收中断
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

        USART_Cmd(USART1,ENABLE);
        USART_ClearFlag(USART1,USART_FLAG_TC);
        printf("串口初始化完成\r\n");
}
[/mw_shl_code]

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

使用道具 举报

26

主题

280

帖子

1

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2013-8-2
在线时间
279 小时
发表于 2017-1-19 16:43:41 | 显示全部楼层
我个性签名档的博客地址,《stm32之串口》。
博客:http://blog.csdn.net/feilusia
CC2541群(127442605);CC2640群(557278427);
Android群(541462902);STM8/STM32群(164311667);
Linux群(512598061);职场交流群(450154342);
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2014-4-14
在线时间
76 小时
发表于 2017-1-19 16:52:34 | 显示全部楼层
回复

使用道具 举报

4

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-1-10
在线时间
28 小时
 楼主| 发表于 2017-1-19 16:53:53 | 显示全部楼层
feilusia 发表于 2017-1-19 16:43
我个性签名档的博客地址,《stm32之串口》。

能看出有什么问题吗?
回复

使用道具 举报

4

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-1-10
在线时间
28 小时
 楼主| 发表于 2017-1-20 11:27:58 | 显示全部楼层
GS1101923161 发表于 2017-1-19 16:52
5个串口代码 http://www.openedv.com/thread-84295-1-1.html

看不太懂,你能看出我的代码有什么问题吗
回复

使用道具 举报

4

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-1-10
在线时间
28 小时
 楼主| 发表于 2017-1-20 11:28:03 | 显示全部楼层
GS1101923161 发表于 2017-1-19 16:52
5个串口代码 http://www.openedv.com/thread-84295-1-1.html

看不太懂,你能看出我的代码有什么问题吗
回复

使用道具 举报

33

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2017-1-2
在线时间
31 小时
发表于 2017-1-20 11:58:58 | 显示全部楼层
不知道你用的什么板子,你也没上传B的代码。从你上传的程序我没看出问题。我不知道问题在哪里,我只能说说我做串口时遇到的问题,你吸取经验吧。
我用的是战舰V3。
我写了一个程序用的uart3和uart1,另一个传感器,把数据发到V3的uart3,uart3接收到的从uart1发送,这样就能在电脑上的串口助手看数据了。
1,你发送和接收串口配置一定要相同,波特率,位数,奇偶校验什么的。
2,串口初始化,要开GPIO时钟,和uart时钟。gpio初始化什么的别弄错。
3,发送和接收的连线,一个板子的发送连另一个板子的接收,这样交叉连接。
我用的V3上uart3,在板子上有ATK MODULE的接口。接口上的TXD和RXD是连接的uart3(要更改跳线帽)。然后ATK MODULE上标着TXD的端口,其实是uart3的RXD。这是我犯的错误。
楼主加油q(≧▽≦q)
回复

使用道具 举报

4

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-1-10
在线时间
28 小时
 楼主| 发表于 2017-1-20 13:14:48 | 显示全部楼层
本帖最后由 zhihuan93 于 2017-1-20 13:21 编辑
firing00 发表于 2017-1-20 11:58
不知道你用的什么板子,你也没上传B的代码。从你上传的程序我没看出问题。我不知道问题在哪里,我只能说说 ...

非常感谢你认真的回答。你说的那三条我再检查一遍,一起进步
回复

使用道具 举报

8

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2017-10-26
在线时间
13 小时
发表于 2017-11-10 20:15:56 | 显示全部楼层
有个问题 你用一个板子想另一个板子 发送数据,   线路连接好后    你怎么知道数据什么时候发送  什么时候结束      
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-2-5
在线时间
18 小时
发表于 2018-2-8 14:29:39 | 显示全部楼层
firing00 发表于 2017-1-20 11:58
不知道你用的什么板子,你也没上传B的代码。从你上传的程序我没看出问题。我不知道问题在哪里,我只能说说 ...

我现在做的东西和你说的这个差不多,不过我是在一个中断里面接受然后赶紧把他发送出去,这样没问题,可是我不会在中断接收了然后用其他函数把接收回来的数据处理一下然后在发出去,请问你会这个吗?
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-8 15:28:02 | 显示全部楼层
判断没接收到数据是通过LED看的吧   led常灭表示没接受到数据 则while函数里printf会一直向上位机打印     看你的程序  和上位机通信的printf用的串口  与和B通信的串口不是同一个串口把?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-4-26 23:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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