hc32l13x串口使用内部高速时钟开启串口功能示例
时间: 2023-07-31 08:04:00 浏览: 78
以下是使用HC32L13X芯片的内部高速时钟开启串口功能的示例代码:
```c
#include "hc32l13x.h"
#define USART_TX_PORT GPIO_PORT_1
#define USART_TX_PIN GPIO_PIN_0
#define USART_RX_PORT GPIO_PORT_1
#define USART_RX_PIN GPIO_PIN_1
#define USART_UNIT M0P_USART0
#define USART_UNIT_CLOCK PWC_FCG1_USART0
#define USART_FUNCTION_CLK PWC_FCG3_FUNC_USART
#define USART_CLKSRC USART_CLK_SRC_PCLK1
#define USART_BAUDRATE 9600u
/**
* @brief 串口初始化函数
* @param None
* @retval None
*/
void USART_Init(void)
{
stc_gpio_cfg_t stcGpioCfg;
stc_usart_uart_init_t stcUsartInit;
stc_clk_freq_t stcClkFreq;
/* 使能GPIO外设时钟 */
PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_GPIO, Enable);
/* USART TX端口配置 */
GPIO_StructInit(&stcGpioCfg);
stcGpioCfg.u16PinDrv = GPIO_PINDRV_HIGH;
GPIO_Init(USART_TX_PORT, USART_TX_PIN, &stcGpioCfg);
GPIO_SetFunc(USART_TX_PORT, USART_TX_PIN, GPIO_FUNC_5_USART);
/* USART RX端口配置 */
GPIO_StructInit(&stcGpioCfg);
stcGpioCfg.u16PinDrv = GPIO_PINDRV_HIGH;
GPIO_Init(USART_RX_PORT, USART_RX_PIN, &stcGpioCfg);
GPIO_SetFunc(USART_RX_PORT, USART_RX_PIN, GPIO_FUNC_5_USART);
/* 使能USART外设时钟 */
PWC_Fcg1PeriphClockCmd(USART_UNIT_CLOCK, Enable);
/* 获取当前系统时钟频率 */
CLK_GetClockFreq(&stcClkFreq);
/* USART初始化配置 */
USART_UART_StructInit(&stcUsartInit);
stcUsartInit.u32Baudrate = USART_BAUDRATE;
stcUsartInit.u32ClkMode = USART_CLKSRC;
stcUsartInit.u32PclkDiv = stcClkFreq.u32Pclk1Freq / USART_BAUDRATE / 4ul;
USART_UART_Init(USART_UNIT, &stcUsartInit);
/* 使能USART模块 */
USART_FunctionCmd(USART_UNIT, UsartTx | UsartRx, Enable);
}
int main(void)
{
/* 初始化串口 */
USART_Init();
/* 其他初始化代码 */
while (1)
{
/* 业务处理代码 */
}
}
```
以上示例代码中,我们通过设置串口的GPIO端口和外设时钟,以及配置USART初始化参数,最终使能USART模块,从而开启串口功能。需要注意的是,由于使用的是内部高速时钟,需要通过计算得到PCLK1分频值。具体的GPIO端口和外设时钟配置,以及USART初始化参数的设置,需要根据实际情况进行调整。
阅读全文