stm32虚拟串口#

备注

使用虚拟串口波特率不起作用,任何波特率都可以用。

硬件资源#

备注

下列是网上随便找的资源,目前测试 USB引脚对应没问题,晶振引脚相同,LED引脚是PB12,LED的另一端连接V3.3

../../_images/stm32f103c8t6_3d%E5%9B%BE.png

../../_images/stm32f103c8t6%E5%8E%9F%E7%90%86%E5%9B%BE.png

../../_images/stm32f103c8t6%E5%BC%95%E8%84%9A%E5%9B%BE.png

配置#

时钟配置#

../../_images/RCC%E9%85%8D%E7%BD%AE.jpg

../../_images/%E6%97%B6%E9%92%9F%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE.jpg

USB外设配置#

../../_images/USB%E9%85%8D%E7%BD%AE1.jpg

../../_images/USB%E9%85%8D%E7%BD%AE2.jpg

测试代码#

#include "usbd_cdc_if.h"

// USB不需要重新插拔
void USB_Reset(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET);
    HAL_Delay(100);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET);
}

int main(void)
{
    /* USER CODE BEGIN 1 */
    uint8_t helloStr[]="hello world\r\n";

    /* USER CODE END 1 */

    /* MCU Configuration--------------------------------------------------------*/

    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* USER CODE BEGIN Init */
    USB_Reset();
    /* USER CODE END Init */

    /* Configure the system clock */
    SystemClock_Config();

    /* USER CODE BEGIN SysInit */

    /* USER CODE END SysInit */

    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    MX_USB_DEVICE_Init();
    /* USER CODE BEGIN 2 */

    /* USER CODE END 2 */

    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
        /* USER CODE END WHILE */

        /* USER CODE BEGIN 3 */
        CDC_Transmit_FS(helloStr,sizeof(helloStr));
        HAL_Delay(1000);
    }
    /* USER CODE END 3 */
}

测试结果#

../../_images/screenshots1.gif