hc32l13x内部时钟RCH使用
时间: 2024-01-12 20:04:34 浏览: 213
HC32L13x芯片的内部时钟RCH可以通过以下步骤使用:
1. 配置RCH时钟的频率。可以使用系统时钟控制器(SCU)模块的RCH_CR寄存器来配置RCH时钟的频率。默认情况下,RCH时钟的频率为4MHz。
2. 使能RCH时钟。可以使用SCU模块的CLK_CR寄存器来使能RCH时钟。使能RCH时钟后,RCH时钟就会成为系统时钟的一部分。
3. 校准RCH时钟的频率。由于RCH时钟是内部RC振荡器,其频率可能会受到温度、电压等因素的影响而发生变化。因此,在使用RCH时钟时,需要对其进行校准以确保其准确性。可以使用SCU模块的RCH_CR寄存器和RCH_TRIM寄存器来进行校准。
4. 使用RCH时钟。在配置和使能RCH时钟之后,可以使用系统时钟控制器模块(SCU)提供的函数来使用RCH时钟,例如将其作为系统时钟或外设时钟源。
需要注意的是,在使用RCH时钟时,需要对其频率进行校准,以确保其准确性。同时,RCH时钟的稳定性可能会受到温度、电压等因素的影响,因此在实际应用中需要进行充分的测试和验证。
相关问题
hc32l13x使用内部时钟RCH,开启串口
好的,使用内部时钟RCH(内部低速时钟)也可以开启串口。下面是使用内部时钟RCH和开启串口的示例代码:
```c
#include "hc32l13x.h"
void UART0_IRQHandler(void)
{
/* 判断是否接收到数据 */
if (UART0->ISR & UART_ISR_RDA_IS_Msk)
{
/* 读取接收到的数据 */
uint8_t data = UART0->RBR;
/* 处理接收到的数据 */
// TODO: 处理接收到的数据
}
/* 判断是否发送完成 */
if (UART0->ISR & UART_ISR_THRE_IS_Msk)
{
/* 发送下一组数据 */
// TODO: 发送下一组数据
}
}
int main(void)
{
/* 使能内部低速时钟 */
CMU->CKSWT &= ~CMU_CKSWT_LXTEN_Msk;
CMU->CKSWT |= CMU_CKSWT_RCHEN_Msk;
/* 选择内部低速时钟作为系统时钟源 */
CMU->CKSWT &= ~CMU_CKSWT_SW_Msk;
/* 设置时钟分频器,这里选择不分频 */
CMU->CLKDIV &= ~CMU_CLKDIV_HCLKDIV_Msk;
/* 使能串口时钟 */
CMU->CLKEN |= CMU_CLKEN_UART0CKEN_Msk;
/* 配置串口工作模式,这里选择8位数据位、无校验位、1位停止位 */
UART0->LCR = UART_LCR_WLS_Msk;
/* 配置波特率,这里选择115200 */
UART0->BAUD = UART_BAUD_DIV_X_EN_Msk | UART_BAUD_DIV_X_ONE_Msk |
(SystemCoreClock / (115200 * 16)) - 1;
/* 使能串口接收和发送中断 */
UART0->IER |= UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk;
/* 使能全局中断 */
NVIC_EnableIRQ(UART0_IRQn);
__enable_irq();
while (1)
{
// TODO: 主循环中的其他操作
}
}
```
在这个示例代码中,我们使用内部低速时钟RCH作为系统时钟源,并且选择不分频。然后,我们使能了串口时钟,并配置了串口工作模式、波特率和中断。在中断处理函数中,我们处理了串口接收和发送的中断。最后,在主循环中可以进行其他操作。
需要注意的是,使用内部低速时钟RCH作为系统时钟源时,串口的波特率和时钟分频器的配置需要根据实际情况进行调整。因为内部低速时钟的频率较低,可能无法支持较高的串口波特率。同时,时钟分频器的设置也需要注意,以保证系统时钟的稳定和准确。
根据hc32l13x官网现有历程,编写串口使用RCH时钟
以下是使用HC32L13X内部RCH时钟的串口初始化示例代码:
```c
#include "hc32l13x.h"
#define UART_RX_PORT GpioPortA
#define UART_RX_PIN GpioPin2
#define UART_TX_PORT GpioPortA
#define UART_TX_PIN GpioPin3
void UART_Init(void)
{
// 使能系统时钟和GPIO时钟
CLK_FcgPeriphClockCmd(CLK_FcgPeriphGpio, Enable);
CLK_FcgPeriphClockCmd(CLK_FcgPeriphUart0, Enable);
// GPIO 端口配置
Gpio_InitIOExt(UART_RX_PORT, UART_RX_PIN, GpioDirModeIn, TRUE, FALSE, FALSE, FALSE);
Gpio_InitIOExt(UART_TX_PORT, UART_TX_PIN, GpioDirModeOut, TRUE, FALSE, FALSE, FALSE);
Gpio_SetAfMode(UART_RX_PORT, UART_RX_PIN, GpioAfMode1);
Gpio_SetAfMode(UART_TX_PORT, UART_TX_PIN, GpioAfMode1);
// UART 配置
M0P_UART0->SCON = 0x50; // 8位数据,无校验,1位停止位
M0P_UART0->SADDR = 0x00; // 地址检测禁止
M0P_UART0->SFDTH = 0x00; // 发送帧定时器高位
M0P_UART0->SFDTL = 0x0d; // 发送帧定时器低位
M0P_UART0->SCFQ = 15; // 波特率 = 8000000 / (15 * (SCFQ + 1))
M0P_UART0->SCON |= 0x01; // 使能 UART 发送和接收
}
```
在以上示例代码中,我们使用 `CLK_FcgPeriphClockCmd()` 函数使能系统时钟和GPIO时钟。接下来,我们使用 `Gpio_InitIOExt()` 函数配置GPIO端口,使用 `Gpio_SetAfMode()` 函数设置GPIO的复用功能为UART模式。最后,使用 `M0P_UART0` 寄存器配置UART参数,包括数据位,校验位,停止位,波特率等,并打开UART发送和接收功能。
需要注意的是,由于使用了HC32L13X内部RCH时钟,所以需要根据实际情况设置合适的波特率分频系数。在以上示例代码中,我们设置波特率分频系数为15,这意味着UART的波特率为8000000 / (15 * (SCFQ + 1))。如果您的系统时钟频率不同,需要根据实际情况调整波特率分频系数。
阅读全文