!!!!跪拜论坛各位大牛,小弟初来匝道,这厢有礼了!!!!!!
操作: 先使用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
各位见过做过这种操作吗??? 遇到过这种问题吗???
大牛们能观望一下,给点建议吗??? |