hc32l136j8ta配uart,内部晶振示例
时间: 2023-08-13 17:02:26 浏览: 231
好的,下面是一个简单的示例代码,演示如何使用hc32l136j8ta的UART通信模块和内部晶振。
首先,需要在代码中包含头文件:
```c
#include "hc32l136.h"
```
然后,需要定义UART通信模块的配置参数:
```c
#define UART_TX_PORT GpioPortA
#define UART_TX_PIN GpioPin9
#define UART_RX_PORT GpioPortA
#define UART_RX_PIN GpioPin10
#define UART_UNIT M0P_UART1
#define UART_CLK PWC_FCG1_PERIPH_UART1
#define UART_IRQn UART1_IRQn
#define UART_IRQ_PRIO 3
#define UART_BAUDRATE 115200
```
在这个示例中,我们将UART的TX引脚和RX引脚分别连接到芯片的PA9和PA10引脚上。UART的时钟源为PCLK1,波特率为115200。
接着,需要定义内部晶振模式:
```c
#define CLK_HSI_TRIM ((uint16_t)16)
#define CLK_HSI_FREQ ((uint32_t)16000000)
#define CLK_SW ((uint8_t)0)
```
这里我们将内部晶振频率设置为16MHz。
然后,需要定义UART中断处理函数:
```c
void UART1_IRQHandler(void)
{
// 处理UART中断事件
}
```
接下来,需要初始化UART通信模块和内部晶振:
```c
void UART_Init(void)
{
// 使能UART时钟
PWC_Fcg1PeriphClockCmd(UART_CLK, Enable);
// 配置UART引脚
Gpio_SetFunc_Uart(UART_TX_PORT, UART_TX_PIN, GpioAf1);
Gpio_SetFunc_Uart(UART_RX_PORT, UART_RX_PIN, GpioAf1);
// 配置UART参数
stc_uart_init_t stcUartInit;
stcUartInit.u32Baudrate = UART_BAUDRATE;
stcUartInit.enDataBits = UartDataBits8;
stcUartInit.enParity = UartParityNone;
stcUartInit.enStopBits = UartStopBits1;
stcUartInit.enMode = UartMode1;
stcUartInit.enClkSel = UartClkPclk1;
stcUartInit.enRxIntEn = Disable;
stcUartInit.enTxIntEn = Disable;
stcUartInit.enRxEn = Enable;
stcUartInit.enTxEn = Enable;
Uart_Init(UART_UNIT, &stcUartInit);
Uart_EnableFunc(UART_UNIT, UartRx);
Uart_EnableFunc(UART_UNIT, UartTx);
// 配置UART中断
NVIC_ClearPendingIRQ(UART_IRQn);
NVIC_SetPriority(UART_IRQn, UART_IRQ_PRIO);
NVIC_EnableIRQ(UART_IRQn);
}
void CLK_Init(void)
{
// 配置内部晶振
CLK_HsiCmd(Enable);
CLK_HsiTrim(CLK_HSI_TRIM);
CLK_SetSysClkSrc(CLK_SW);
CLK_SetHCLKDiv(CLK_CKDIV_HCLK_DIV1);
}
```
在初始化完UART和内部晶振之后,就可以开始使用UART通信模块进行数据的发送和接收了。例如,可以使用以下代码向串口发送一串数据:
```c
void UART_SendData(uint8_t *pData, uint32_t size)
{
while(size--)
{
Uart_SendData(UART_UNIT, *pData++);
while(Uart_GetFlag(UART_UNIT, UartTxEmpty) != Set)
{
// 等待发送完成
}
}
}
```
这样,就可以使用hc32l136j8ta的UART通信模块和内部晶振进行数据通信了。
阅读全文