编写stm32f103c6t6 uart2代码
时间: 2023-07-02 14:18:18 浏览: 121
以下是一个简单的示例代码,用于在STM32F103C6T6上使用UART2:
```c
#include "stm32f10x.h"
void uart2_init(void) {
// 使能时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN;
// 配置 PA2 为复用推挽输出模式(TX)
GPIOA->CRL &= ~(GPIO_CRL_CNF2 | GPIO_CRL_MODE2);
GPIOA->CRL |= GPIO_CRL_MODE2_1 | GPIO_CRL_CNF2_1;
// 配置 PA3 为浮空输入模式(RX)
GPIOA->CRL &= ~(GPIO_CRL_CNF3 | GPIO_CRL_MODE3);
GPIOA->CRL |= GPIO_CRL_CNF3_0;
// 配置波特率
USART2->BRR = 0x1D4C; // 9600 @ 72MHz
// 配置数据位和停止位
USART2->CR1 &= ~(USART_CR1_M | USART_CR1_PCE);
USART2->CR2 &= ~(USART_CR2_STOP);
// 使能发送和接收
USART2->CR1 |= USART_CR1_RE | USART_CR1_TE;
// 使能串口
USART2->CR1 |= USART_CR1_UE;
}
void uart2_send_char(char c) {
while (!(USART2->SR & USART_SR_TXE));
USART2->DR = c;
}
char uart2_receive_char(void) {
while (!(USART2->SR & USART_SR_RXNE));
return USART2->DR & 0xFF;
}
void uart2_send_string(char* str) {
while (*str) {
uart2_send_char(*str++);
}
}
```
在上面的代码中,我们首先使用 `uart2_init()` 函数初始化 UART2。在该函数中,我们首先启用了 GPIOA 和 USART2 的时钟,然后设置了 PA2 和 PA3 的 GPIO 配置,以便将它们用作 UART2 的 TX 和 RX 引脚。接下来,我们配置了波特率、数据位和停止位,并最终启用了发送和接收。
之后,我们提供了三个函数,用于发送单个字符、接收单个字符和发送字符串。这些函数分别使用 `USART_SR_TXE` 和 `USART_SR_RXNE` 标志位来检测 UART 的发送和接收缓冲区是否空闲。如果缓冲区不空闲,则函数将等待,直到缓冲区变为空闲状态。
请注意,该示例代码仅用于参考。在实际应用中,您可能需要根据具体情况进行更改和优化。
阅读全文