完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
完成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模式时工作均正常。 希望得到专家的解答。 |
|
相关推荐
29个回答
|
|
用MX验证了一下,默认情况下在F4上PA9配置的是VBUS_FS,PA10连接的是OTD_FS_ID。而且有别针锁住,说明硬件有关联。和楼主的说法一致。但是PB6其实也连接到audio相关的CS43L22上了。尚不清楚为什么配置到PB6没问题。
不过我坚持以为是外围电路引起的。请注意PA9充当的是VBUS,也连接到了EMIF02-USB03F2这个芯片。这个片子是USB保护芯片,如果你想确认是不是它影响的话你可以尝试吧PA9设置成浮空输出看看电平是什么样子。我还没做实验,不过我估计很难拉低。不过没有试验过。 没有实验就没有发言权,以上只能算是估计。 祝你好运,你自己的板子PA9和PA10的状态看了吗? |
|
|
|
|
|
|
|
本帖最后由 wenyangzeng 于 2015-7-6 09:52 编辑
应该是C49充电把PA9一直拉高而出现锯齿波。20楼中的图2锯齿波可以很好解释C49在其中所起的关键作用。 |
|
|
|
貌似有些意思 回头试试
|
|
|
|
从波形来看,还有硬件电路的分析,应该是外设影响的。楼主可以测试一下接收是否正常。如果接收正常,说明发送引脚受到外设影响。
|
|
|
|
|
|
|
|
本帖最后由 wenyangzeng 于 2015-7-6 22:45 编辑
为真正找出问题所在,临时编制一小段代码,每100mS让GPIOC_9翻转一次,用示波器观察波形周期。 while(1) { delay_ms(100); GPIOC->ODR ^=0X0200; }; 图1 STM32F407-STM32F4-DISCOVERY上的正确波形 图2 故障机上的波形:2个延时周期只有7.2格 现在终于能看到“庐山真面目”了,故障机MCU的工作周期比STM32F407-STM32F4-DISCOVERY缩短了1.2倍左右。这是导致故障机波特率偏高的原因。更换一只晶振后故障排除。就是还有点不明白的是用示波器直接测量晶振的工作频率(参见20楼的图6、 图7)为何2机的结果却都非常接近? 至此,本贴终于得到圆满解决。换一只晶振所花费的时间不足1分钟,查找故障所花费的时间累计不少于24小时。虽然表面上看比例太悬殊。但能有一次这样的过程,机会实在难得,让我们长进不少。同时还节外生枝,导出对STM32F407-STM32F4-DISCOVERY的误判。 期间得到版主和许多网友的热情帮助。非常感谢! |
|
|
|
ctwewer 发表于 2018-10-11 00:20 你说的很有可能,毕竟4.9uF也不小了。试过了吗? |
|
|
|
ctwewer 发表于 2018-10-11 01:20 楼主我不明白,那为什么你说PB可以PA不可以。难道你说的是你之前板子的晶振有问题? 又及,你换的是同一批次的还是更换了别的型号的? |
|
|
|
回复楼上,故障经过大概是这样的:我的工程板绘制时USART1是接PA口,无法改接PB口进行验证。8M晶振频率偏高导致通讯失败后,用一片STM32F407DISCOVERY板来对比调试,恰好这片板的PA9连接了一部分外设,其中就有那只C49的电解电容,由于这只电容的滤波作用让PA口输出波形严重失真,得到这片板上的PA口接USART1也是失败的结论,而PB口由于没有那只滤波电容所以通讯成功。 因为找到STM32F407DISCOVERY板PA口通讯错误的原因,才回过头来查找到工程板是晶振不良引起通讯失败的原因。同样是PA口通讯失败,原因却是不同的。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1049 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1017 浏览 2 评论
2123 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1219 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1639 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 11:26 , Processed in 0.675222 second(s), Total 61, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号