应用场景:
本次在项目中,由于对方的上位机软件比较老旧。
该软件只能通过串口通讯。而我们的设备只引出了USB口。还好STM32 的USB类型可以设置成虚拟串口。所以可以通过把USB枚举成虚拟串口(virtual com port设备)来与该上位机软件通讯。
本来是想直接移植STM32 的USB_FS库。奈何移植失败。(给跪了orz orz orz…)
又想起CubeMX也可以配置的。就用CubeMX配置工程,效果出奇的好。PC能够正常的枚举和通讯。所以趁热和大家分享分享,自己也做个记录。
以下内容就是如何一步一步通过CubeMX,把STM32的USB配置成虚拟串口的过程。
文章最后放上了本次CubeMX的工程和对应的虚拟串口代码。
配置过程:
1、点开CubeMX,新建工程,选择MCU。我用的是STM32F103VCT6。你们根据自己实际的MCU选择对应的型号以及封装格式。
2、选择系统时钟源。这边必须要配置,没配置系统时钟,不能生成正确的代码。
这里我使用的是外部晶振。(根据实际配置)
3、配置USB的上拉PIN脚。我这边的上拉PIN是PA13(根据实际情况配置)。注意硬件上DP要接个1.5K的上拉。用以表示高速设备以及枚举控制。
4、选上USB FS功能
5、继续“去中间层”,设置USB的识别类型。我们是虚拟口,所以选VCP设备。
6、配置系统时钟树参数。我的外部晶振是12M,所以要得到72M时钟,要选择倍频系数为6倍频。(晶振是8M则选择9倍频)
注意USB时钟要为48M。所以选1.5分频。
7、配置结束,去设置工程保存的位置。注意工具和版本。
8、生成工程。
9、打开工程,已经直接生成好了USB虚拟串口的代码。并可以直接编译不报错。
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */