你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407的USART1只能映射到PB6-7,如果选择PA9-10就乱码

[复制链接]
wenyangzeng 提问时间:2015-7-3 21:05 /

    完成1个工程项目设计,使用STM32F407VGT6芯片,USART1选用了PA9,PA10,板子完成后串口调试总是过不了。不得已使用STM32F4-DISCOVERY通过RS232电平转换连接到PC机串口进行RS232通讯验证。
    首先使用GPIOA-PA9,PA10映射USART1,初始化代码如下:
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate = bound;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
       USART_Init(USART1, &USART_InitStructure);
       USART_Cmd(USART1, ENABLE);

     PC机方使用SSCOM,通讯结果是一片乱码。
   后改用PB6,PB7映射USART1,修改相关语句:
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //对不起12楼,我粘贴错了
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);


        GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1);
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOB,&GPIO_InitStructure);

       USART初始化相同,不重复了。


从PB口进行,通讯结果一切正常,
查看手册:USART1可以映射到PA9,PA10或PB6,PB7,手册并未特别说明两者使用在USART1有何区别或初始化时需要做何特殊处理。百思不得其解。由于PCB版图已经制作完成,使用PA了口,现在如果从软件方面无法纠正将造成不少的浪费。
由于工程板与STM32F4-DISCOVERY板的PA口在USART1工作时出现同样故障,2片板的PA口同时损坏的机率很小,并且2片板的PA9,PA10配置为非USART1模式时工作均正常。
希望得到专家的解答。
未命名9.JPG








收藏 评论29 发布时间:2015-7-3 21:05

举报

29个回答
wenyangzeng 回答时间:2015-7-12 08:53:31
watershade 发表于 2015-7-10 22:36
楼主我不明白,那为什么你说PB可以PA不可以。难道你说的是你之前板子的晶振有问题?
又及,你换的是同一 ...

回复楼上,故障经过大概是这样的:我的工程板绘制时USART1是接PA口,无法改接PB口进行验证。8M晶振频率偏高导致通讯失败后,用一片STM32F407DISCOVERY板来对比调试,恰好这片板的PA9连接了一部分外设,其中就有那只C49的电解电容,由于这只电容的滤波作用让PA口输出波形严重失真,得到这片板上的PA口接USART1也是失败的结论,而PB口由于没有那只滤波电容所以通讯成功。
      因为找到STM32F407DISCOVERY板PA口通讯错误的原因,才回过头来查找到工程板是晶振不良引起通讯失败的原因。同样是PA口通讯失败,原因却是不同的。
momososo 回答时间:2015-7-3 21:46:34
刚学没用过标准库,试试cubeMX产生的工程如何?
stary666 回答时间:2015-7-4 00:36:28
不可能,是没配置好
wenyangzeng 回答时间:2015-7-4 07:35:18
本帖最后由 wenyangzeng 于 2015-7-4 07:38 编辑
stary666 发表于 2015-7-4 00:36
不可能,是没配置好

回复楼上:都是同样的配置,只是更改PA或PB,结果确实不一样。应该不是你说的没配置好。帖子中修改PB6,PB7的配置,与PA9,PA10相同的语句就没有列出了。只把有变动的用红色标记列出而已。
你好我好大家好! 回答时间:2015-7-4 08:57:42
可能是代码没有配置好吧        
momososo 回答时间:2015-7-4 10:59:55
你有用到TIMER吗?
wenyangzeng 回答时间:2015-7-4 11:52:40
本帖最后由 wenyangzeng 于 2015-7-4 13:55 编辑
momososo 发表于 2015-7-4 10:59
你有用到TIMER吗?

评估时就只用USART,任何中断都不用(包括USART接收中断),使用的是同一台硬件,在PB口发送正常,也可以正常使用接收中断,使用PA口就是不行。
wenyangzeng 回答时间:2015-7-4 13:50:56
本帖最后由 wenyangzeng 于 2015-7-4 13:53 编辑

今天把通讯代码移植到F1系列评估板上,使用PA9,PA10通讯也很正常。
在这里把硬件连接图也贴上来:
232.JPG
mark0668 回答时间:2015-7-4 13:58:16
可能是你其它代码冲突,你去掉所有代码只留下串口1的代码调试下是否能通过
wenyangzeng 回答时间:2015-7-4 14:01:17
mark0668 发表于 2015-7-4 13:58
可能是你其它代码冲突,你去掉所有代码只留下串口1的代码调试下是否能通过 ...

谢谢楼上,我就是只用USART,其他都不用,而且是在同一台开发板的不同GPIO口得到不同结果。
123下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版