准备
rtthread 4.1.1
潘多拉L475开发板
cubemx设置
将USB_FS设置为设备
不打开cubemx里的中间件,会与rtt里的程序产生冲突。
并且把新生成的SystemClock_Config(void)拷贝到rtt工程中。
这里遇到过一个问题:因为bsp包的工程打开的功能太多,导致usb的功能和分频出现了问题,电脑无法正常显示出CDC虚拟串口,后来将多余的功能先关掉,CDC虚拟串口功能就正常出现了。
menuconfig的设置
这里可选择将USB设置的单一的功能或是复合的功能。
至此下载程序运行后就能看到虚拟出来的串口。
有了串口后还没完,刚开始使用的时候出现了上位机没收到数据和无法接收数据的问题。
参考: RT-Thread USB虚拟串口收发调试
上位机没收到数据主要的问题就是cdc_vcom.c中
static rt_err_t _interface_handler(ufunction_t func, ureq_t setup)
{
......
case CDC_SET_CONTROL_LINE_STATE:
data->connected = (setup->wValue & 0x01) > 0?RT_TRUE:RT_FALSE;
RT_DEBUG_LOG(RT_DEBUG_USB, ("vcom state:%d \n", data->connected));
dcd_ep0_send_status(func->device->dcd);
break;
......
}
代码中的data->connected = (setup->wValue & 0x01) > 0?RT_TRUE:RT_FALSE;中的0x01代表检查DTR,0x02代表检查RTS,如果不需要DTR或者RTS可以直接把这里的data->connected置1。
或者是在上位机里勾选DTR或RTS也能也能收到数据。
无法接收数据的问题参考rtt的串口中断接收程序;将open设置为
rt_device_open(dev, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX);