简单的基于 STM32F103C8T6 实现 USB 虚拟串口通信的示例代码框架

文章目录

概要

  1. 初始化相关配置
    首先需要包含必要的头文件,配置系统时钟、引脚复用以及 USB 相关的初始化等操作。
    #include “stm32f10x.h”
    #include “usb_lib.h”
    #include “usb_desc.h”
    #include “usb_pwr.h”

// 定义USB相关的缓冲区大小
#define RX_BUFF_SIZE 64
#define TX_BUFF_SIZE 64

// USB接收和发送缓冲区
uint8_t USB_Rx_Buffer[RX_BUFF_SIZE];
uint8_t USB_Tx_Buffer[TX_BUFF_SIZE];

// 端点相关定义
#define ENDP0_RXADDR 0x40
#define ENDP0_TXADDR 0x80
#define ENDP1_RXADDR 0x88
#define ENDP1_TXADDR 0xC8

// USB设备相关状态变量等
__IO uint8_t USB_Configuration = 0;
__IO uint8_t USB_Rx_Cnt = 0;

// 系统时钟配置函数(以72MHz为例,可根据实际需求调整)
void SystemClock_Config(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(TRUE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
;
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource()!= 0x08)
;
}
}

// USB中断初始化
void USB_Interrupts_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

// USB引脚复用及相关初始化
void USB_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// PA11 - USB D-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;<

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值