华大HC32-(03)-串口UART通信
一、开发环境及工具[*]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_tstcCfg;
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仿真截图
楼主少了个02啊,写的很好,我会持续追更的 好详细啊,就是一楼一楼的有点多
页:
[1]