以下代码功能#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 13:32:39 浏览: 17
这段代码的功能是初始化系统时钟、串口、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的数据并进行处理。
相关问题
hbm2ddl.auto
hbm2ddl.auto是Hibernate框架中的一个配置属性,用于自动创建数据库表结构的功能。它有以下几个可选值:
- `create`: 每次启动应用程序时,都会删除现有的数据库表并重新创建新的表结构。
- `create-drop`: 每次启动应用程序时,都会删除现有的数据库表并重新创建新的表结构。当应用程序关闭时,也会删除这些表。
- `update`: 每次启动应用程序时,会根据实体类的定义和数据库表结构的差异来更新数据库表结构。
- `validate`: 每次启动应用程序时,会校验实体类的定义和数据库表结构是否一致,如果不一致则会抛出异常。
这个属性通常是在Hibernate的配置文件中进行设置,以告诉Hibernate如何处理数据库表结构与实体类之间的映射关系。需要注意的是,在生产环境中,通常不建议使用`create`或`create-drop`选项,因为这会导致现有数据的丢失。而`update`或`validate`选项则更适合生产环境的使用。
hibernate.hbm2ddl.auto
hibernate.hbm2ddl.auto是Hibernate配置文件中的一个属性,用于指定Hibernate在启动时如何自动创建和更新数据库表结构。它有以下几个可选值:
1. validate:Hibernate启动时会校验实体类和数据库表结构是否一致,如果不一致则会抛出异常。
2. update:Hibernate启动时会根据实体类的定义自动更新数据库表结构,但不会删除已经存在的表或字段。
3. create:Hibernate启动时会根据实体类的定义自动创建数据库表结构,但如果表已经存在则会抛出异常。
4. create-drop:Hibernate启动时会根据实体类的定义自动创建数据库表结构,但在Hibernate关闭时会自动删除表结构。
一般来说,我们在开发阶段使用update或create,而在生产环境中使用validate或不设置该属性。