以下代码功能#include "ddl.h" #include "uart.h" #include "gpio.h" #include "flash.h" #include "sysctrl.h" #define T1_PORT (3) #define T1_PIN (3) volatile static uint8_t u8RxData; volatile static uint8_t u8TxCnt = 0; volatile static uint8_t u8RxCnt = 0; void App_UartCfg(void); void App_PortInit(void); void App_ClkCfg(void); int32 t main (void) { App_ClkCfg () ; App_PortInit () ; App_UartCfg(); while (1) { if(u8RxCnt>=1) { u8RxCnt = 0; Uart_SendDataIt(MOP_UART1, ~u8RxData); } } } void App_ClkCfg(void) { stc_sysctrl_clk_cfg_t sysctrl_clk_cfg; Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE); Flash_WaitCycle(FlashWaitCycle0); sysctrl_SetRCHTrim(SysctrlRchFreq8MHz); sysctrl_clk_cfg.enClkSrc = SysctrlClkRCH; sysctrl_clk_cfg.enHClkDiv = SysctrlHclkDiv1; sysctrl_clk_cfg.enPClkDiv = SysctrlPclkDiv1; Sysctrl_ClkInit(&sysctrl_clk_cfg); } void Uart1_IRQHandler(void) { if(Uart_GetStatue(M0P_UART1, UartRC)) { Uart_ClrStatus(M0P_UART1, UartRC); u8RxData = Uart_ReceiveData(M0P_UART1); u8RxCnt++; } if(Uart_GetStatus(M0P_UART1, UartTC)) { Uart_ClrStatus(M0P_UART1, UartTC); u8TxCnt++; } } void App_PortInit(void) { stc_gpio_cfg_t stcGpioCfg; DDL_ZERO_STRUCT(stcGpioCfg); Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); stcGpioCfg.enDir = GpioDirOut; Gpio_Init(GpioPortA, GpioPin2, &stcGpioCfg); Gpio_SetAFMode(GpioPortA, GpioPin2, GpioAf1); stcGpioCfg.enDir = GpioDirIn; Gpio_Init(GpioPortA, GpioPin3, &stcGpioCfg); Gpio_SetAFMode(GpioPortA, GpioPin3, GpioAf1); } void App_UartCfg(void) { stc_uart_cfg_t stcCfg; DDL_ZERO_STRUCT(stcCfg); Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1, TRUE); stcCfg.enRunMode = UartMskMode3; stcCfg.enStopBit = UartMsk1bit; stcCfg.enMmdorCk = UartMskEven; stcCfg.stcBaud.u32Baud = 9600; stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); Uart_Init(M0P_UART1, &stcCfg); Uart_ClrStatus(M0P_UART1, UartRC); Uart_ClrStatus(M0P_UART1, UartTC); Uart_EnableIrq(M0P_UART1, UartRxIrq); Uart_EnableIrq(M0P_UART1, UartTxIrq); EnableNvic(UART1_IRQn, IrqLevel3, TRUE); }
时间: 2024-04-03 08:32:39 浏览: 207
TIMER_IAR.rar_stm_stm 32_timer.h IAR
这段代码的功能是初始化系统时钟、串口、GPIO和Flash,然后配置UART1为中断模式,当接收到数据后将数据取反发送回去。具体实现如下:
1. App_ClkCfg()函数用于初始化系统时钟,使能Flash时钟并设置Flash等待周期,然后配置RCH时钟频率为8MHz,最后初始化系统时钟。
2. App_PortInit()函数用于初始化GPIO端口,将PA2配置为输出模式,PA3配置为输入模式,并设置PA2和PA3的复用功能为UART功能。
3. App_UartCfg()函数用于初始化UART1,将运行模式设置为模式3(即同时启用RX和TX),设置停止位为1位、奇偶校验位为偶校验、波特率为9600,时钟分频器为8或16分频,时钟源为PCLK。然后清除UART1的接收和发送中断标志位,使能UART1的接收和发送中断,并开启UART1的中断。
4. Uart1_IRQHandler()函数为UART1的中断服务函数,当接收到数据时,将数据取反后发送回去,同时增加接收计数器u8RxCnt;当一帧数据发送完成时,增加发送计数器u8TxCnt。
5. 在main函数中,无限循环等待接收到UART1的数据并进行处理。
阅读全文