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

2019-07-20 06:06发布

!!!!跪拜论坛各位大牛,小弟初来匝道,这厢有礼了!!!!!!

操作: 先使用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

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
cxtdy
1楼-- · 2019-07-20 10:54
 精彩回答 2  元偷偷看……
cxtdy
2楼-- · 2019-07-20 13:44
LBD 置一 时,是 使能硬件串口--->使能虚拟串口--->失能虚拟串口 ---> 使能硬件串口
cxtdy
3楼-- · 2019-07-20 13:51
cxtdy 发表于 2018-9-13 16:19
另外补充一下,当 失能虚拟串口--->失能虚拟串口---->将gpio作为普通输出----->无法拉高或者拉低gpio 时:
...

使能虚拟串口--->失能虚拟串口---->将gpio作为普通输出----->无法拉高或者拉低gpio
cxtdy
4楼-- · 2019-07-20 15:48
 精彩回答 2  元偷偷看……
DreamWaterPro
5楼-- · 2019-07-20 17:32
 精彩回答 2  元偷偷看……

一周热门 更多>