zoukankan      html  css  js  c++  java
  • 对于STM32F103的USART的通讯调试

    USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。

    STM32F103USART对应的引脚分别为:


    USART1:

    RX:PA10

    TX:PA9


    USART2:

    RX:PA3

    TX:PA2


    USART3:

    RX:PB11

    TX:PB10


    一:只使用一个USART接口进行通讯测试,例如使用USART1进行测试

    在示例程序中找到下列代码:

    #define DEBUG_USARTx USART1

    #define DEBUG_USARTx_BAUDRATE 115200

    #define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()

    #define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()


    #define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()

    #define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_9

    #define DEBUG_USARTx_Tx_GPIO GPIOA

    #define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_10

    #define DEBUG_USARTx_Rx_GPIO GPIOA


    #define DEBUG_USART_IRQn USART1_IRQn


    如果只使用一个USART接口进行测试的话只用在此处修改定义即可

    通过串口调试工具测试结果如下:

    可根据个人不同的需求更换不同的USART 接口,例如更换为USART3

    #define DEBUG_USARTx USART3

    #define DEBUG_USARTx_BAUDRATE 115200

    #define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()

    #define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()


    #define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()

    #define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_10

    #define DEBUG_USARTx_Tx_GPIO GPIOB

    #define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_11

    #define DEBUG_USARTx_Rx_GPIO GPIOB


    #define DEBUG_USART_IRQn USART3_IRQn





    .同时使用USART1USART3进行测试

    1).在自定义的头文件中添加USART3的定义:

    #define DEBUG_USART3 USART3

    #define DEBUG_USART3_BAUDRATE 115200

    #define DEBUG_USART3_RCC_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()

    #define DEBUG_USART3_RCC_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()


    #define DEBUG_USART3_GPIO_ClK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()

    #define DEBUG_USART3_Tx_GPIO_PIN GPIO_PIN_10

    #define DEBUG_USART3_Tx_GPIO GPIOB

    #define DEBUG_USART3_Rx_GPIO_PIN GPIO_PIN_11

    #define DEBUG_USART3_Rx_GPIO GPIOB


    #define DEBUG_USART3_IRQn USART3_IRQn

    2).voidHAL_UART_MspInit(UART_HandleTypeDef* huart)增加USART3的端口配置:

    voidHAL_UART_MspInit(UART_HandleTypeDef* huart)

    {


    GPIO_InitTypeDef GPIO_InitStruct;

    if(huart->Instance==DEBUG_USARTx)

    {

    DEBUG_USART_RCC_CLK_ENABLE();

    GPIO_InitStruct.Pin = DEBUG_USARTx_Tx_GPIO_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO, &GPIO_InitStruct);


    GPIO_InitStruct.Pin = DEBUG_USARTx_Rx_GPIO_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

    GPIO_InitStruct.Pull = GPIO_NOPULL;

    HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO, &GPIO_InitStruct);

    }

    else if(huart->Instance==DEBUG_USART3)

    {

    DEBUG_USART3_RCC_CLK_ENABLE();

    GPIO_InitStruct.Pin = DEBUG_USART3_Tx_GPIO_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(DEBUG_USART3_Tx_GPIO, &GPIO_InitStruct);


    GPIO_InitStruct.Pin = DEBUG_USART3_Rx_GPIO_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

    GPIO_InitStruct.Pull = GPIO_NOPULL;

    HAL_GPIO_Init(DEBUG_USART3_Rx_GPIO, &GPIO_InitStruct);

    }

    }


    3).voidHAL_UART_MspDeInit(UART_HandleTypeDef* huart)增加USART3的配置:

    void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)

    {


    if(huart->Instance==DEBUG_USARTx)

    {

    DEBUG_USART_RCC_CLK_DISABLE();

    HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO, DEBUG_USARTx_Tx_GPIO_PIN);

    HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO, DEBUG_USARTx_Rx_GPIO_PIN);

    HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);

    }

    else if(huart->Instance==DEBUG_USART3)

    {

    DEBUG_USART3_RCC_CLK_DISABLE();

    HAL_GPIO_DeInit(DEBUG_USART3_Tx_GPIO, DEBUG_USART3_Tx_GPIO_PIN);

    HAL_GPIO_DeInit(DEBUG_USART3_Rx_GPIO, DEBUG_USART3_Rx_GPIO_PIN);

    HAL_NVIC_DisableIRQ(DEBUG_USART3_IRQn);

    }

    }


    4).添加USART3的初始化设置函数及数据发送函数:

    UART_HandleTypeDef husart3_debug;

    void MX_DEBUG_USART3_Init(void)

    {

    DEBUG_USART3_GPIO_ClK_ENABLE();

    husart3_debug.Instance = DEBUG_USART3;

    husart3_debug.Init.BaudRate = DEBUG_USART3_BAUDRATE;

    husart3_debug.Init.WordLength = UART_WORDLENGTH_9B;

    husart3_debug.Init.StopBits = UART_STOPBITS_1;

    husart3_debug.Init.Parity = UART_PARITY_EVEN;

    husart3_debug.Init.Mode = UART_MODE_TX_RX;

    husart3_debug.Init.HwFlowCtl = UART_HWCONTROL_NONE;

    husart3_debug.Init.OverSampling = UART_OVERSAMPLING_16;

    HAL_UART_Init(&husart3_debug);

    }

    voiduart3_write(uint8_t* data, uint32_tlen)

    {

    HAL_UART_Transmit(&husart3_debug, data, len, 0xffffff);

    }

    在主函数中添加USART3的初始化:

    5).将完成后的程序编译烧录至STM32,同时通过串口调试工具连接USART1USART3观察通讯结果:

     

    USART1USART3可同时向外发送数据。

    完成对USART接口的通讯测试。


  • 相关阅读:
    conan本地安装包
    Python PIL 怎么知道写入图片格式的kb大小
    怎么对C++枚举(不是类)里面的东西进行随机
    当双方Visual studio windows SDK不一样的时候的解决办法
    不小心使用vcpkg之后再使用conan,一直报链接错误
    关于obj文件的理解
    卸载VS2015之后,安装VS2017出错
    性状、生成器、闭包、OPcache【Modern PHP】
    docker容器修改hosts文件,重启失效问题解决
    微信公众号-模板消息通用接口封装
  • 原文地址:https://www.cnblogs.com/fcchen/p/13006207.html
Copyright © 2011-2022 走看看