OpenEdv-开源电子网

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

菜鸟求教 探索者STM32F407 usart2串口通信失败

[复制链接]

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
发表于 2017-3-31 21:03:56 | 显示全部楼层 |阅读模式
2金钱
请问各位大神
usart的代码按照usart1写的初始化代码如下
void uart2_init(u32 bound){
   //GPIO¶Ë¿úéèÖÃ
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

    //′®¿ú2òy½Å¸′óÃó3éä
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2¸′óÃÎaUSART2
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3¸′óÃÎaUSART2
        
        //USART1¶Ë¿úÅäÖÃ
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;                    //GPIOA2óëGPIOA3
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                                        //¸′óÃ1|Äü
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                //Ëù¶è100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                                         //íÆíì¸′óÃêä3ö
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                                         //éÏà-
        GPIO_Init(GPIOA,&GPIO_InitStructure);                                                         //3õê¼»ˉPA2£&#172A3

   //USART2 3õê¼»ˉéèÖÃ
        USART_InitStructure.USART_BaudRate = bound;                                                                                //2¨ìØÂêéèÖÃ
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;                                                //×Ö3¤Îa8λêy¾Y¸ñê½
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                                                        //ò»¸öí£Ö1λ
        USART_InitStructure.USART_Parity = USART_Parity_No;                                                                //ÎTÆæÅ¼D£Ñéλ
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                                        //êÕ·¢Ä£ê½
        USART_Init(USART2, &USART_InitStructure);                                                                                 //3õê¼»ˉ′®¿ú1
        
        USART_Cmd(USART2, ENABLE);  //ê1Äü′®¿ú2
        
        USART_ClearFlag(USART2, USART_FLAG_TC);
        
        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);                        //¿aÆôÏà1ØÖD¶Ï

        //Usart2 NVIC ÅäÖÃ
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                //′®¿ú2ÖD¶Ïí¨μà
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; //ÇàÕ¼óÅÏè¼¶2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //×óóÅÏè¼¶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure);                                                        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷¡¢
}

usart2只用来发送,但是在主函数中,发送并没有在串口调试助手看到输出
int main(void)
{
        u8 t;
        u8 len;        
        u16 times=0;  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏè¼¶·Ö×é2
        delay_init(168);                //Ñóê±3õê¼»ˉ
        uart_init(115200);        //′®¿ú23õê¼»ˉ2¨ìØÂêÎa115200
        LED_Init();                                  //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú  
        while(1)
        {
                        u8 i=31;
                        USART_SendData(USART2,i);                                                         //Ïò′®¿ú1·¢Ëíêy¾Y
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);        //μè′y·¢Ëí½áêø
                        i++;
        }
}

我是用两个杜邦线把PA2 PA3接到了usb232的txd和rxd 请问是哪里有问题,没有printf做重定向

最佳答案

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

探索者407例程就有串口2 的!!! [mw_shl_code=c,true]#include "sys.h" #include "usart2.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK STM32F407开发板 //串口2初始化 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2014/5/14 //版本:V1.0 //版权所有,盗版必究。 //Copy ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-3-31 21:03:57 | 显示全部楼层
探索者407例程就有串口2 的!!!
[mw_shl_code=c,true]#include "sys.h"
#include "usart2.h"          
//////////////////////////////////////////////////////////////////////////////////          
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//串口2初始化
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2014/5/14
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved
//********************************************************************************
//修改说明
//无
//////////////////////////////////////////////////////////////////////////////////        

//初始化IO 串口2
//pclk1CLK1时钟频率(Mhz)
//bound:波特率
void usart2_init(u32 pclk1,u32 bound)
{           
        float temp;
        u16 mantissa;
        u16 fraction;          
        temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV,OVER8设置为0
        mantissa=temp;                                                         //得到整数部分
        fraction=(temp-mantissa)*16;                         //得到小数部分,OVER8设置为0         
    mantissa<<=4;
        mantissa+=fraction;
        RCC->AHB1ENR|=1<<0;                                           //使能PORTA口时钟  
        RCC->APB1ENR|=1<<17;                                          //使能串口2时钟
        GPIO_Set(GPIOA,PIN2|PIN3,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出
        GPIO_AF_Set(GPIOA,2,7);                                        //PA2,AF7
        GPIO_AF_Set(GPIOA,3,7);                                         //PA3,AF7            
        //波特率设置
        USART2->BRR=mantissa;         // 波特率设置         
        USART2->CR1|=1<<3;          //串口发送使能  
        USART2->CR1|=1<<13;          //串口使能
}





[/mw_shl_code]
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-3-31 21:12:47 | 显示全部楼层
。。。。。
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-3-31 21:18:34 | 显示全部楼层
大神呢
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-3-31 21:27:09 | 显示全部楼层
在线等
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-3-31 23:20:04 | 显示全部楼层
.........
回复

使用道具 举报

0

主题

174

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2016-1-9
在线时间
64 小时
发表于 2017-4-1 00:00:35 | 显示全部楼层
I/O初始化那 好像有问题,你把  GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);
                                                GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);
这两句放后面试试
回复

使用道具 举报

13

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
765
金钱
765
注册时间
2016-1-20
在线时间
129 小时
发表于 2017-4-1 10:10:43 | 显示全部楼层
我能说你好像主函数里面没有对uart2_init(u32 bound)做初始化嘛
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-12-27
在线时间
14 小时
发表于 2017-4-1 15:37:32 | 显示全部楼层
主函数UART_Init(115200);改成UART2_Init(115200);
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-4-1 16:43:54 | 显示全部楼层
IsLuo 发表于 2017-4-1 10:10
我能说你好像主函数里面没有对uart2_init(u32 bound)做初始化嘛

我都试了
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-4-1
在线时间
5 小时
发表于 2017-4-1 18:13:17 来自手机 | 显示全部楼层
串口二是在挂在总线1上的
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-4-1 18:28:42 | 显示全部楼层
wensonglin126 发表于 2017-4-1 18:13
串口二是在挂在总线1上的

不是是总线1吗??
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-4-2 22:43:41 | 显示全部楼层
正点原子 发表于 2017-3-31 21:03
探索者407例程就有串口2 的!!!
[mw_shl_code=c,true]#include "sys.h"
#include "usart2.h"          

谢谢,不过我就看得懂库函数。。。
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-4-2 22:52:11 | 显示全部楼层
大神请问 usart2的PA2 PA3可以对于接到usb232的txd和rxd(也就是usart1)输出给上位机吗
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-4-2 22:52:28 | 显示全部楼层
whyviking 发表于 2017-4-1 00:00
I/O初始化那 好像有问题,你把  GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);
             ...

大神请问 usart2的PA2 PA3可以对于接到usb232的txd和rxd(也就是usart1)输出给上位机吗
回复

使用道具 举报

0

主题

174

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2016-1-9
在线时间
64 小时
发表于 2017-4-2 22:55:53 | 显示全部楼层
shuyuan123 发表于 2017-4-2 22:52
大神请问 usart2的PA2 PA3可以对于接到usb232的txd和rxd(也就是usart1)输出给上位机吗

什么意思?,如果是想直接接到rs232接口的 TX RX 那肯定不行。
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-4-3 08:46:55 | 显示全部楼层
whyviking 发表于 2017-4-2 22:55
什么意思?,如果是想直接接到rs232接口的 TX RX 那肯定不行。

我就是这样干的 为什么呢
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-31
在线时间
4 小时
 楼主| 发表于 2017-4-3 08:47:12 | 显示全部楼层
终于问到了
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-8-2
在线时间
7 小时
发表于 2019-9-23 14:26:15 | 显示全部楼层
大神,你在吗,你当初个USART1改成USART2串口通信失败是怎么解决呢,我现在和你遇到了同样的问题
回复

使用道具 举报

16

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2019-9-4
在线时间
52 小时
发表于 2019-9-23 17:06:15 | 显示全部楼层
Anson0304 发表于 2019-9-23 14:26
大神,你在吗,你当初个USART1改成USART2串口通信失败是怎么解决呢,我现在和你遇到了同样的问题

我也蹲一个解决方案
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-9-26
在线时间
14 小时
发表于 2019-10-6 11:19:46 | 显示全部楼层
好难
回复

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-10-14
在线时间
4 小时
发表于 2019-10-14 22:36:25 | 显示全部楼层
TTL电平不能直接接USB232 你需要一个rs232芯片才行,你这样用需要一个usb转ttl的才行
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-9-3
在线时间
2 小时
发表于 2020-9-12 15:57:03 | 显示全部楼层
yyq94470412 发表于 2019-10-14 22:36
TTL电平不能直接接USB232 你需要一个rs232芯片才行,你这样用需要一个usb转ttl的才行

问题是用了USB转TTL连接RX,TX也没有反应
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 07:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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