hc32l13x使用内部时钟后,串口初始化如何配置
时间: 2024-04-03 07:37:16 浏览: 101
当使用HC32L13X的内部时钟时,串口初始化需要以下步骤:
1. 配置GPIO引脚
首先需要配置串口的GPIO引脚,包括TX和RX引脚。可以使用HC32L13X的GPIO模块进行配置。例如,将TX引脚配置为推挽输出模式,RX引脚配置为上拉输入模式。
2. 配置串口时钟
使用HC32L13X的时钟模块,需要将串口时钟源设置为内部时钟(HSI)并配置相应的分频器和倍频器,以使串口时钟频率符合要求。例如,如果要求串口时钟为115200bps,则需要将HSI时钟分频为8,倍频为16。
3. 配置串口参数
使用HC32L13X的串口模块,需要配置串口参数,包括波特率、数据位、停止位和校验位等。例如,设置波特率为115200bps,数据位为8位,停止位为1位,无校验位。
4. 使能串口模块
最后,使能HC32L13X的串口模块,以使串口能够正常工作。例如,使能串口发送和接收功能。
以上是使用HC32L13X的内部时钟进行串口初始化的基本步骤。具体的实现方法可以参考HC32L13X的数据手册和相关应用笔记。
相关问题
hc32l13x使用内部时钟后,串口初始化如何配置9600,示例代码
以下是使用HC32L13X的内部时钟进行串口初始化配置9600的示例代码:
```c
#include "hc32_gpio.h"
#include "hc32_uart.h"
#include "hc32_sysctrl.h"
int main(void)
{
stc_gpio_config_t stcGpioCfg;
stc_uart_config_t stcUartCfg;
// 使能内部高速时钟
Sysctrl_ClkSourceEnable(SysctrlClkXTL, FALSE);
Sysctrl_ClkSourceEnable(SysctrlClkHSI, TRUE);
// 配置GPIO引脚
Gpio_StructInit(&stcGpioCfg);
stcGpioCfg.u16PinCfg = GpioTx;
stcGpioCfg.u16PinAttr = GpioAttrPullup;
Gpio_Init(GpioPortA, GpioPin9, &stcGpioCfg);
stcGpioCfg.u16PinCfg = GpioRx;
Gpio_Init(GpioPortA, GpioPin10, &stcGpioCfg);
// 配置串口时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0, TRUE);
Uart_SetClkDiv(UARTCH0, SysctrlClockDiv8); // HSI时钟分频为8
Uart_SetBaudrate(UARTCH0, 9600UL); // 设置波特率为9600
// 配置串口参数
Uart_StructInit(&stcUartCfg);
stcUartCfg.u32Baudrate = 9600UL;
stcUartCfg.enDataLength = UartDataLength8;
stcUartCfg.enStopBit = UartStopBit1;
stcUartCfg.enParity = UartParityNone;
Uart_Init(UARTCH0, &stcUartCfg);
// 使能串口发送和接收功能
Uart_EnableFunc(UARTCH0, UartRx);
Uart_EnableFunc(UARTCH0, UartTx);
while (1)
{
// 串口发送数据
Uart_SendData(UARTCH0, 'A');
}
}
```
以上代码将HC32L13X的内部时钟设置为串口时钟源,并通过GPIO模块配置了TX和RX引脚。同时,使用UART模块配置了串口时钟分频、波特率、数据位、停止位和校验位等参数,并使能了串口发送和接收功能。在主循环中,通过串口发送数据。
hc32l13x串口使用内部高速时钟开启串口功能示例
以下是使用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初始化参数的设置,需要根据实际情况进行调整。
阅读全文