串口使用M0P方式,RCH使用stc_sysctrl_clk,实现串口使用内部时钟
时间: 2023-07-20 19:44:10 浏览: 78
哈夫曼编码
好的,我理解了你的问题。使用M0P方式时,串口使用内部时钟可以通过以下步骤实现:
1. 配置系统时钟源为内部时钟。可以使用stc_sysctrl_clk函数实现,如下所示:
```c
Sysctrl_SetPeripheralGate(SysctrlPeripheralClkGpio, TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralClkUart0, TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralClkUart1, TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralClkUart2, TRUE);
Sysctrl_SetPeripheralGate(SysctrlPeripheralClkUart3, TRUE);
Sysctrl_SetRCHTrim(SysctrlRchFreq22M);
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
Sysctrl_SetRCLTrim(SysctrlRclFreq38400);
Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
Sysctrl_SetPeripheralDivider(SysctrlPeripheralUart0, SysctrlDiv1);
Sysctrl_SetPeripheralDivider(SysctrlPeripheralUart1, SysctrlDiv1);
Sysctrl_SetPeripheralDivider(SysctrlPeripheralUart2, SysctrlDiv1);
Sysctrl_SetPeripheralDivider(SysctrlPeripheralUart3, SysctrlDiv1);
Sysctrl_SetPeripheralClockSource(SysctrlPeripheralUart0, SysctrlClkRCH);
Sysctrl_SetPeripheralClockSource(SysctrlPeripheralUart1, SysctrlClkRCH);
Sysctrl_SetPeripheralClockSource(SysctrlPeripheralUart2, SysctrlClkRCH);
Sysctrl_SetPeripheralClockSource(SysctrlPeripheralUart3, SysctrlClkRCH);
```
2. 配置串口的波特率、数据位、停止位、校验位等参数。可以使用Uart_Init函数实现,如下所示:
```c
stc_uart_cfg_t stcCfg;
PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_UART0, Enable);
stcCfg.enRunMode = UartMode1;
stcCfg.enStopBit = Uart1bit;
stcCfg.enMmdorCk = UartMmdor;
stcCfg.enSck = UartSckEnable;
stcCfg.u32Baudrate = 9600;
stcCfg.enDataLength = Uart8bit;
stcCfg.enParity = UartParityNone;
Uart_Init(UARTCH0, &stcCfg);
```
3. 开启串口发送和接收中断。可以使用Uart_EnableIrq函数实现,如下所示:
```c
Uart_EnableIrq(UARTCH0, UartRxIrq);
Uart_EnableFunc(UARTCH0, UartRx);
EnableNvic(UART0_IRQn, IrqLevel3, TRUE);
```
以上是使用M0P方式,串口使用内部时钟的实现步骤。希望能对你有所帮助!
阅读全文