Bootstrap

STM32 第20章 USART--串口通信3

时间:2024.10.30

参考资料:

《零死角玩转STM32》“USART--串口通信”章节

 

一、学习内容

1、串口2345代码移植

实现控制串口2-->将串口1的宏修改成串口2的即可

1.1 串口的宏

串口1:
//为了方便移植,定义的宏
//串口1-USART
#define  DEBUG_USARTx                      USART1
#define  DEBUG_USART_CLK                   RCC_APB2Periph_USART1
#define  DEBUG_USART_APBxClkCmd            RCC_APB2PeriphClockCmd
#define  DEBUG_USART_BAUDRATE              115200
//USART GPIO引脚宏定义
#define  DEBUG_USART_GPIO_CLK              (RCC_APB2Periph_GPIOA)
#define  DEBUG_USART_GPIO_APBxClkCmd       RCC_APB2PeriphClockCmd

#define  DEBUG_USART_TX_GPIO_PORT          GPIOA
#define  DEBUG_USART_TX_GPIO_PIN           GPIO_Pin_9
#define  DEBUG_USART_RX_GPIO_PORT          GPIOA
#define  DEBUG_USART_RX_GPIO_PIN           GPIO_Pin_10

#define  DEBUG_USART_IRQ                   USART1_IRQn
#define  DEBUG_USART_IRQHandler            USART1_IRQHandler
串口2:
// 串口2-USART2
//#define  DEBUG_USARTx                   USART2
//#define  DEBUG_USART_CLK                RCC_APB1Periph_USART2
//#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
//#define  DEBUG_USART_BAUDRATE           115200

 USART GPIO 引脚宏定义
//#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
//#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
//    
//#define  DEBUG_USART_TX_GPIO_PORT         GPIOA   
//#define  DEBUG_USART_TX_GPIO_PIN          GPIO_Pin_2
//#define  DEBUG_USART_RX_GPIO_PORT       GPIOA
//#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_3

//#define  DEBUG_USART_IRQ                USART2_IRQn
//#define  DEBUG_USART_IRQHandler         USART2_IRQHandler
串口3:
 串口3-USART3
//#define  DEBUG_USARTx                   USART3
//#define  DEBUG_USART_CLK                RCC_APB1Periph_USART3
//#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
//#define  DEBUG_USART_BAUDRATE           115200

 USART GPIO 引脚宏定义
//#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOB)
//#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
//    
//#define  DEBUG_USART_TX_GPIO_PORT         GPIOB   
//#define  DEBUG_USART_TX_GPIO_PIN          GPIO_Pin_10
//#define  DEBUG_USART_RX_GPIO_PORT       GPIOB
//#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11

//#define  DEBUG_USART_IRQ                USART3_IRQn
//#define  DEBUG_USART_IRQHandler         USART3_IRQHandler
串口4:
// 串口4-UART4
#define  DEBUG_USARTx                   UART4
#define  DEBUG_USART_CLK                RCC_APB1Periph_UART4
#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
#define  DEBUG_USART_BAUDRATE           115200

// USART GPIO 引脚宏定义
#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC)
#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
    
#define  DEBUG_USART_TX_GPIO_PORT         GPIOC   
#define  DEBUG_USART_TX_GPIO_PIN          GPIO_Pin_10
#define  DEBUG_USART_RX_GPIO_PORT       GPIOC
#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11

#define  DEBUG_USART_IRQ                UART4_IRQn
#define  DEBUG_USART_IRQHandler         UART4_IRQHandler
串口5:
// 串口5-UART5
//#define  DEBUG_USARTx                   UART5
//#define  DEBUG_USART_CLK                RCC_APB1Periph_UART5
//#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
//#define  DEBUG_USART_BAUDRATE           115200

 USART GPIO 引脚宏定义
//#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD)
//#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
//    
//#define  DEBUG_USART_TX_GPIO_PORT         GPIOC   
//#define  DEBUG_USART_TX_GPIO_PIN          GPIO_Pin_12
//#define  DEBUG_USART_RX_GPIO_PORT       GPIOD
//#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_2

//#define  DEBUG_USART_IRQ                UART5_IRQn
//#define  DEBUG_USART_IRQHandler         UART5_IRQHandler

 

TIPS:

在串口宏定义修改后,记得出口重复定义的问题--->使用条件编译

//条件编译解决重复定义的问题
/*当我们使用哪个串口是,就把它的宏定义成1,其余不使用的定义成0*/ 

//条件编译解决重复定义的问题
/*当我们使用哪个串口是,就把它的宏定义成1,其余不使用的定义成0*/
#define DEBUG_USART1    1
#define DEBUG_USART2    0
#define DEBUG_USART3    0
#define DEBUG_USART4    0
#define DEBUG_USART5    0


#if DEBUG_USART1
//为了方便移植,定义的宏
//串口1-USART
#define  DEBUG_USARTx                      USART1
#define  DEBUG_USART_CLK                   RCC_APB2Periph_USART1
#define  DEBUG_USART_APBxClkCmd            RCC_APB2PeriphClockCmd
#define  DEBUG_USART_BAUDRATE              115200
//USART GPIO引脚宏定义
#define  DEBUG_USART_GPIO_CLK              (RCC_APB2Periph_GPIOA)
#define  DEBUG_USART_GPIO_APBxClkCmd       RCC_APB2PeriphClockCmd

#define  DEBUG_USART_TX_GPIO_PORT          GPIOA
#define  DEBUG_USART_TX_GPIO_PIN           GPIO_Pin_9
#define  DEBUG_USART_RX_GPIO_PORT          GPIOA
#define  DEBUG_USART_RX_GPIO_PIN           GPIO_Pin_10

#define  DEBUG_USART_IRQ                   USART1_IRQn
#define  DEBUG_USART_IRQHandler           
;