wenyangzeng 发表于 2015-7-3 21:05:11

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


    完成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模式时工作均正常。
希望得到专家的解答。









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通讯也很正常。
在这里把硬件连接图也贴上来:

mark0668 发表于 2015-7-4 13:58:16

可能是你其它代码冲突,你去掉所有代码只留下串口1的代码调试下是否能通过

wenyangzeng 发表于 2015-7-4 14:01:17

mark0668 发表于 2015-7-4 13:58
可能是你其它代码冲突,你去掉所有代码只留下串口1的代码调试下是否能通过 ...

谢谢楼上,我就是只用USART,其他都不用,而且是在同一台开发板的不同GPIO口得到不同结果。
页: [1] 2 3
查看完整版本: STM32F407的USART1只能映射到PB6-7,如果选择PA9-10就乱码