OpenEdv-开源电子网

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

mcu为stm32f407,使用串口2接收不到数据(不用中断),求各路大神指导下新手,搞了好久也不知道哪出错,万分感谢

[复制链接]

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
发表于 2016-2-1 01:53:39 | 显示全部楼层 |阅读模式
3金钱
void Usart_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);                                //
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);                                //
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);                        //        
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);                        //
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;                                         //
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF ;                                                                        //
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;                                                        //
        GPIO_InitStructure.GPIO_OType=  GPIO_OType_PP ;                                                        //
        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;                                                                        /
        GPIO_Init(GPIOA,&GPIO_InitStructure);                                                                                                //
        
        USART_InitStructure.USART_BaudRate=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_Mode=USART_Mode_Rx|USART_Mode_Tx; //êÕ·¢Ä£ê½
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;        //
        USART_Init(USART2,&USART_InitStructure);                                                                                //
                                                                                                               
        USART_Cmd(USART2,ENABLE);                                                                                                                                                //
}
int main(void)
{
        u8 res;
        Usart_Init();
        while(1)
        {
                if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE))
                {
                                res=USART_ReceiveData(USART2);
                                USART_SendData(USART2,res);
                }
        }
}

最佳答案

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

问题已解决,是串口2的TX,RX没接到USB上对应的RX,TX上导致数据收不到
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-1 01:53:40 | 显示全部楼层

问题已解决,是串口2的TX,RX没接到USB上对应的RX,TX上导致数据收不到
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-1 02:01:12 | 显示全部楼层
如果看不清上面的,可以看这里,都是一样的,各路大神求救


void Usart_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);                                //
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);                                //
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);                        //        
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);                        //
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;                                         //
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF ;                                                                        //
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;                                                        //
        GPIO_InitStructure.GPIO_OType=  GPIO_OType_PP ;                                                        //
        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;                                                                        /
        GPIO_Init(GPIOA,&GPIO_InitStructure);                                                                                                //
        
        USART_InitStructure.USART_BaudRate=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_Mode=USART_Mode_Rx|USART_Mode_Tx; //êÕ·¢Ä£ê½
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;        //
        USART_Init(USART2,&USART_InitStructure);                                                                                //
                                                                                                               
        USART_Cmd(USART2,ENABLE);                                                                                                                                                //
}
int main(void)
{
        u8 res;
        Usart_Init();
        while(1)
        {
                if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE))
                {
                                res=USART_ReceiveData(USART2);
                                USART_SendData(USART2,res);
                }
        }
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-2-1 11:12:19 | 显示全部楼层
可以先用中断实现了,再来改不要中断的。
用中断的方式,我们探索者有大把例程
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-1 13:11:16 | 显示全部楼层
正点原子 发表于 2016-2-1 11:12
可以先用中断实现了,再来改不要中断的。
用中断的方式,我们探索者有大把例程

我用了中断,串口2也不行啊,原子哥,串口2例程我也看了,配置没错,
回复

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2016-2-1 13:29:24 | 显示全部楼层
确定给串口2发送数据了吗,程序应该没错了,检查硬件
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-1 16:16:58 | 显示全部楼层
Watmin 发表于 2016-2-1 13:29
确定给串口2发送数据了吗,程序应该没错了,检查硬件

我用串口助手发送的数据,接收到并显示在串口上
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-1 16:17:34 | 显示全部楼层
夜梦寒 发表于 2016-2-1 16:16
我用串口助手发送的数据,接收到并显示在串口上

用的是原子开发板,不存在硬件问题吧
回复

使用道具 举报

3

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
金钱
434
注册时间
2013-3-18
在线时间
82 小时
发表于 2016-2-1 17:27:52 | 显示全部楼层
使能复用时钟
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-1 17:44:27 | 显示全部楼层

我使能了呀
回复

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
发表于 2016-2-2 17:48:27 | 显示全部楼层
首先确认一下串口助手配置:
1. 串口助手波特率设置的是不是115200?
2. 数据位是不是8?
3. 停止位是不是1?
4. 校验位和流控是不是None?

然后建议先勾选hex发送和hex接收来进行测试,发送一串数据比如:12 34 56 78 90 (注意要有空格)


如果还不行就换个串口助手试试~
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-3 22:17:10 | 显示全部楼层
特朗姆斯 发表于 2016-2-2 17:48
首先确认一下串口助手配置:
1. 串口助手波特率设置的是不是115200?
2. 数据位是不是8?

兄弟,还是不行啊
回复

使用道具 举报

3

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
金钱
434
注册时间
2013-3-18
在线时间
82 小时
发表于 2016-2-18 09:52:40 | 显示全部楼层

从代码里看,并没有
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 03:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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