一、开发环境及工具
- HC32F003 / HC32F005
- Keil uVision5 V5.33 / IAR For ARM 7.80.4 (J-Link)
- 此工程源码下载路径 : https://gitee.com/amx/hc32ddl-app
二、串口模式的选择
-
我们选择Mode1,异步全双工:波特率:19200, 数据位:8, 校验位:None, 停止位:1, 流控:None

-
选择UART1作为通信口,同时需开启TIMER1用于产生波特率

-
为减少数据通讯出错概率,还需要提高系统时钟到24MHz(有时需要支持115200波特率)



三、代码实现
-
串口引脚配置,这里使用UART1的P35和P36引脚
static void App_UartPortInit(void) { stc_gpio_cfg_t stcGpioCfg; DDL_ZERO_STRUCT(stcGpioCfg); Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟 ///<TX stcGpioCfg.enDir = GpioDirOut; Gpio_Init(UART_TX_PORT, UART_TX_PIN, &stcGpioCfg); Gpio_SetAfMode(UART_TX_PORT, UART_TX_PIN, GpioAf1); //配置P35 端口为URART1_TX ///<RX stcGpioCfg.enDir = GpioDirIn; Gpio_Init(UART_RX_PORT, UART_RX_PIN, &stcGpioCfg); Gpio_SetAfMode(UART_RX_PORT, UART_RX_PIN, GpioAf1); //配置P36 端口为URART1_RX } -
串口初始化设置(波特率:19200, 数据位:8, 校验位:None, 停止位:1, 流控:None)
static void App_UartInit(void) { uint16_t timer=0; stc_uart_baud_cfg_t stcBaud; stc_bt_cfg_t stcBtCfg; stc_uart_cfg_t stcCfg; DDL_ZERO_STRUCT(stcBaud); DDL_ZERO_STRUCT(stcBtCfg); //外设时钟使能 Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);//模式0/2可以不使能 Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE); stcBaud.bDbaud = 0u;//双倍波特率功能 stcBaud.u32Baud = 19200u;//更新波特率位置 stcBaud.enMode = UartMode1; //计算波特率需要模式参数 stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); //获取PCLK timer = Uart_SetBaudRate(M0P_UART1, &stcBaud); stcBtCfg.enMD = BtMode2; stcBtCfg.enCT = BtTimer; Bt_Init(TIM1, &stcBtCfg);//调用basetimer1设置函数产生波特率 Bt_ARRSet(TIM1,timer); Bt_Cnt16Set(TIM1,timer); Bt_Run(TIM1); stcCfg.enRunMode = UartMode1;//测试项,更改此处来转换4种模式测试 Uart_Init(M0P_UART1, &stcCfg); ///< UART中断配置 Uart_EnableIrq(M0P_UART1, UartRxIrq); Uart_ClrStatus(M0P_UART1, UartRC); EnableNvic(UART1_IRQn, IrqLevel2, TRUE); }
四、添加Amxlink协议及测试
-
有关于Amxlink协议请查看文章《Amxlink通信协议-简介》
-
主函数实现(源码链接: https://gitee.com/amx/hc32ddl-app)
int32_t main(void) { SystemInit(); // 系统时钟设置 App_BtTimerTest(); // 基本定时器0 Api_Init(); // Amxlink串口数据缓存 hc_uart_init(); // UART1初始化 while (1) { Api_Poll_Parse(); // Amxlink协议解析 } } -
通过串口工具发送数据到MCU,MCU返回接收到的数据

- IAR仿真截图

本文介绍了基于HC32F003/HC32F005微控制器的UART串口配置,包括选择Mode1异步全双工模式,设置波特率为19200,数据位8,校验位None,停止位1,流控None,并使用TIMER1生成波特率。同时,展示了如何通过KeiluVision5或IARForARM进行开发,以及如何配置UART1的P35和P36引脚。此外,还提到了Amxlink通信协议的使用,并给出了主函数的实现,实现了数据接收与解析。最后,通过IAR仿真验证了串口通信的正确性。
8649

被折叠的 条评论
为什么被折叠?



