使用寄存器版本编写将STM32的串口1和串口2同时发送数据的代码
时间: 2023-05-27 11:04:07 浏览: 54
对于STM32的串口1和串口2同时发送数据的代码,我们可以使用寄存器版本编写,如下所示:
```
#include "stm32f4xx.h"
void init_uart(void){
//初始化串口1
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; //使能USART1时钟
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; //使能GPIOB时钟
GPIOB->MODER |= GPIO_MODER_MODER6_1; //PB6设置为复用模式
GPIOB->AFR[0] |= 0x7000000; //PB6设置为AF7
USART1->BRR = 104; //波特率设置为9600
USART1->CR1 |= USART_CR1_UE | USART_CR1_TE; //使能USART1和发送使能
//初始化串口2
RCC->APB1ENR |= RCC_APB1ENR_USART2EN; //使能USART2时钟
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //使能GPIOA时钟
GPIOA->MODER |= GPIO_MODER_MODER2_1; //PA2设置为复用模式
GPIOA->AFR[0] |= 0x700; //PA2设置为AF7
USART2->BRR = 104; //波特率设置为9600
USART2->CR1 |= USART_CR1_UE | USART_CR1_TE; //使能USART2和发送使能
}
void send_uart(uint8_t data){
//发送数据到串口1
USART1->DR = data;
while ((USART1->SR & USART_SR_TXE) == 0); //等待发送完成
//发送数据到串口2
USART2->DR = data;
while ((USART2->SR & USART_SR_TXE) == 0); //等待发送完成
}
int main(void){
init_uart(); //初始化串口
while(1){
send_uart(0x55); //发送数据
}
}
```
上述代码中,我们通过对USART1和USART2的寄存器进行设置,实现了同时发送数据的功能。在发送数据时,我们分别将数据写入USART1和USART2的DR寄存器中,并通过轮询等待发送完成,保证数据正常发送。