OpenEdv-开源电子网

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

求stm32f407大神搭救新手

[复制链接]

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
发表于 2016-2-3 23:51:31 | 显示全部楼层 |阅读模式
3金钱
我想用串口2实现自发自收,调试了好久都没成功,看了些例程,配置没错啊,各路大神指导下吧
#include "stm32f4xx.h"
void Usart_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);                                //GPIOAòy½Åê±Öóê1Äü
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);                                //′®¿ú2ê±Öóê1Äü
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);                        //PA2éèÖÃÎa′®¿ú2¸′óà      
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);                        //PA3éèÖÃÎa′®¿ú2¸′óÃ
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;                                         //PA2£&#172A3òy½Å3õê¼»ˉ
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF ;                                                                        //éèÖÃÎaòy½Å¸′óÃ
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;                                                        //òy½ÅËùÂêÎa50MHz
        GPIO_InitStructure.GPIO_OType= GPIO_OType_PP ;                                                        //íÆíì
        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;                                                                        //éÏà-
        GPIO_Init(GPIOA,&GPIO_InitStructure);                                                                                                //GPIOAòy½Å3õê¼»ˉ
       
        USART_InitStructure.USART_BaudRate=9600;                                                                        //2¨ìØÂêéèÖÃÎa9600
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;   //8λ×Ö3¤
        USART_InitStructure.USART_StopBits=USART_StopBits_1 ;                          //ò»Î»í£Ö1λ
        USART_InitStructure.USART_Parity=USART_Parity_No ;                                        //ÎTÆæżD£Ñé
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //êÕ·¢Ä£ê½
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;        //ÎTó2¼tá÷
        USART_Init(USART2,&USART_InitStructure);                                                                                //′®¿ú3õê¼»ˉ
       
        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;                              //ÖD¶Ïí¨μàÎa′®¿ú2
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                                            //ÖD¶Ïí¨μàê1Äü
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;                //ÖD¶ÏÇàÕ¼óÅÏ輶Îa1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;                                        //ÖD¶ÏÏìó|óÅÏ輶Îa1
        NVIC_Init(&NVIC_InitStructure);                                                                                              //ÖD¶Ï3õê¼»ˉoˉêy
                                                                                                                                                                                                                                                       
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);              //′®¿úÖD¶Ïê1Äüoˉêy                                                                                                                                                                                                                                               
        USART_Cmd(USART2,ENABLE);                                                                                                                                                //′®¿ú2ê1Äü
}

void USART2_IRQHandler(void)                                //ÖD¶Ï·tÎñoˉêy     
{
        u8 res;
        if(USART_GetITStatus(USART2,USART_IT_RXNE))                                                               
        {
                res=USART_ReceiveData(USART2);
                USART_SendData(USART2,res);
        }
}



int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);       
        Usart_Init();
        while(1);

}

最佳答案

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

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

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-3 23:51:32 | 显示全部楼层
问题已解决,是串口2的TX,RX没接到USB上对应的RX,TX上导致数据收不到
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-2-4 08:33:45 | 显示全部楼层

哪条语句在发送?
没看到有发送语句。


回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-4 11:46:56 | 显示全部楼层
void USART2_IRQHandler(void)                                //ÖD¶Ï·tÎñoˉêy     
{
        u8 res;
        if(USART_GetITStatus(USART2,USART_IT_RXNE))                                                               
        {
                res=USART_ReceiveData(USART2);
                USART_SendData(USART2,res);
        }
}
这就是啊,想要实现在串口助手上发送,接收后并显示在串口助手上
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-2-4 13:27:26 | 显示全部楼层
帮顶。。。。。
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-2-4 13:46:48 | 显示全部楼层
夜梦寒 发表于 2016-2-4 11:46
void USART2_IRQHandler(void)                                //ÖD¶Ï·tÎñoˉ ...


那必须PC主动发。
球在PC这边。

仿真器,在中断函数设断点,收到数据会停在断点处。


回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-4 19:41:30 | 显示全部楼层
xuande 发表于 2016-2-4 13:46
那必须PC主动发。
球在PC这边。

什么意思,不大明白,能指导下吗,兄弟
回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-4 19:41:53 | 显示全部楼层
FantaSy_ 发表于 2016-2-4 13:27
帮顶。。。。。

谢谢哈
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-2-4 22:42:40 | 显示全部楼层
夜梦寒 发表于 2016-2-4 19:41
什么意思,不大明白,能指导下吗,兄弟


你这程序必须先收到内容,才向外发送,否则死等。


回复

使用道具 举报

3

主题

17

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-1
在线时间
12 小时
 楼主| 发表于 2016-2-4 23:55:37 | 显示全部楼层
xuande 发表于 2016-2-4 22:42
你这程序必须先收到内容,才向外发送,否则死等。

谢谢你的指导,我知道哪错了,刚调试成功,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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