打印

stm32f401CCU把虚拟串口转换成正常gpio时,gpio不能正常使用

[复制链接]
592|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白鹭hu|  楼主 | 2018-7-12 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
!!!!跪拜论坛各位大牛,小弟初来匝道,这厢有礼了!!!!!!

操作: 先使用usb虚拟串口输出,然后再使用硬件串口输出。
gpio PA11,PA12 复用为 usb,然后gpio PA11,PA12 复用硬件串口usart6

1、虚拟串口初始化成功,可以正常发送数据,使用的是 hal 库进行的
初始化函数为 USB_DEVICE_Init()
void USB_DEVICE_Init(void)
{;USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);

USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS);
USBD_Start(&hUsbDeviceFS);}
此函数为利用 cube 自动生成,然后拿过来直接用的。

2、由于使用过虚拟串口之后,仍然需要使用硬件串口,所以失能了虚拟串口,重新使能了硬件串口,使用的是usart6.
① hal 库中没有直接给出失能 虚拟串口的api,不过找到了 USBD_Stop(&hUsbDeviceFS) 和 USBD_DeInit(&hUsbDeviceFS) 两个函数,
然后调用这两个函数,进行失能虚拟串口操作。
② 重新使能硬件usart6.
3、使用硬件usart6进行发送数据,发现usart6发送数据不成功。


---------------------------------------现象记录与个人分析------------------------------------------------


1、通过单步调试时,发现 从 虚拟串口 --->转化为----> 硬件串口后(gpio复用为usart6),串口寄存器 SR 中的 LBD 位置 1,LBD位的中文解释见图


2、怀疑是gpio复用时出错,但是找不到原因(找的想哭,呜呜呜......)
① 此处做过一个测试,就是失能 虚拟串口--->失能虚拟串口---->将gpio作为普通输出-----;无法拉高或者拉低gpio。
② 另外还做过一个测试,硬件 uart6 初始化---->失能usart6--->把gpio重新当做输出功能--->可以正常的拉高拉低gpio

各位见过做过这种操作吗??? 遇到过这种问题吗???
大牛们能观望一下,给点建议吗???

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

396

主题

396

帖子

0

粉丝