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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版