hc32l130 UART1使用MODE3,内部晶振方式示例代码
时间: 2024-01-12 12:04:32 浏览: 71
HC32L130的UART1可以使用MODE3,即内部晶振方式,以下是使用UART1 MODE3的示例代码:
```c
#include "hc32l130.h"
int main(void) {
/* 使能外设时钟 */
CMU->AHBCKENR0 |= CMU_AHBCKENR0_GPIOCKEN | CMU_AHBCKENR0_UART1CKEN;
/* 配置GPIO引脚 */
GPIOA->AFRP &= ~(GPIO_AFRL_AFSEL4 | GPIO_AFRL_AFSEL5);
GPIOA->AFRP |= (0x01u << GPIO_AFRL_AFSEL4_Pos) | (0x01u << GPIO_AFRL_AFSEL5_Pos);
GPIOA->PFR1 |= GPIO_PFR1_P10;
/* 配置UART1 */
UART1->CR1 = 0x00u;
UART1->CR2 = UART_CR2_MODE_Msk | UART_CR2_STOP_Msk;
UART1->CR3 = UART_CR3_TXFTL_Msk | UART_CR3_RXFTL_Msk | UART_CR3_DMAT_Msk | UART_CR3_DMAR_Msk;
UART1->BAUD = 0x1D4C; /* 波特率为115200 */
/* 打开UART1 */
UART1->CR1 |= UART_CR1_UARTEN_Msk;
/* 发送数据 */
while (!(UART1->SR & UART_SR_TX_FIFO_EMPTY_Msk));
UART1->DR = 'H';
while (!(UART1->SR & UART_SR_TX_FIFO_EMPTY_Msk));
UART1->DR = 'e';
while (!(UART1->SR & UART_SR_TX_FIFO_EMPTY_Msk));
UART1->DR = 'l';
while (!(UART1->SR & UART_SR_TX_FIFO_EMPTY_Msk));
UART1->DR = 'l';
while (!(UART1->SR & UART_SR_TX_FIFO_EMPTY_Msk));
UART1->DR = 'o';
/* 接收数据 */
while (!(UART1->SR & UART_SR_RX_FIFO_FULL_Msk));
uint8_t data = (uint8_t)UART1->DR;
while (1);
}
```
在这个示例代码中,我们首先使能了GPIO和UART1的时钟。然后,我们配置了GPIO引脚,将PA4和PA5分别配置为TXD和RXD引脚,并开启了PA5的上拉电阻。接着,我们配置了UART1,将UART1的工作模式设置为MODE3,即内部晶振方式,并设置了UART1的波特率、数据位数、停止位数等等。最后,我们向UART1发送了一个字符串,并从UART1接收了一个字节的数据。注意,在使用UART1 MODE3时,波特率需要根据内部晶振的频率进行计算,这里我们使用的是8MHz的内部晶振,波特率为115200。
阅读全文