21ic问答首页 - HC32L110c6ua的串口0无法正常收发
HC32L110c6ua的串口0无法正常收发
这是我的串口0配置,主要通过debug的时候串口寄存器全为0
void Uart0_Init(void)
{
uint16_t timer=0;
uint32_t pclk=0;
stc_uart_config_t stcConfig;//定义串口结构体
stc_uart_irq_cb_t stcUartIrqCb;//串口中断回调函数结构体
stc_uart_multimode_t stcMulti;//串口多主机模式结构体
stc_uart_baud_config_t stcBaud;//波特率配置结构体
stc_bt_config_t stcBtConfig;//基础定时器配置结构体
DDL_ZERO_STRUCT(stcUartIrqCb);//清空数据函数
DDL_ZERO_STRUCT(stcMulti);
DDL_ZERO_STRUCT(stcBaud);
DDL_ZERO_STRUCT(stcBtConfig);
Gpio_InitIOExt(0,1,GpioDirIn,FALSE,FALSE,FALSE,TRUE); //配置01引脚为输入模式RX
Gpio_InitIOExt(0,2,GpioDirOut,FALSE,FALSE,FALSE,TRUE);//配置02引脚为输出模式TX
//通道端口配置
Gpio_SetFunc_UART0_RXD_P01();//RX输入
Gpio_SetFunc_UART0_TXD_P02();//TX输出
//外设时钟使能
Clk_SetPeripheralGate(ClkPeripheralBt,TRUE);//模式0/2可以不使能
Clk_SetPeripheralGate(ClkPeripheralUart0,TRUE);//使能串口时钟
stcUartIrqCb.pfnRxIrqCb = RxIntCallback;//设置接收中断函数
stcUartIrqCb.pfnTxIrqCb = NULL;//设置发送中断为空
stcUartIrqCb.pfnRxErrIrqCb = ErrIntCallback;//设置接收错误中断函数
stcConfig.pstcIrqCb = &stcUartIrqCb;//将中断函数结构体指针赋值给串口配置
stcConfig.bTouchNvic = TRUE;//NVIC中断控制器使能标志
stcConfig.enRunMode = UartMode1;//测试项,更改此处来转换4种模式测试
//stcMulti.enMulti_mode = UartNormal;//测试项,更改此处来转换多主机模式,mode2/3才有多主机模式
stcConfig.pstcMultiMode = &stcMulti;//将中断回调函数结构体指针赋值给串口配置结构体
stcBaud.bDbaud = 0u;//不使能
stcBaud.u32Baud = 9600u;//设置波特率为9600bps
stcBaud.u8Mode = UartMode1; //计算波特率需要模式参数
pclk = Clk_GetPClkFreq();//获取外设始终频率
timer=Uart_SetBaudRate(UARTCH0,pclk,&stcBaud);//计算波特率对应得定时器
stcBtConfig.enMD = BtMode2;//基础定时器模式为Mode2
stcBtConfig.enCT = BtTimer;//基础定时器工作在定时器模式
Bt_Init(TIM0, &stcBtConfig);//调用basetimer0设置函数产生波特率
Bt_ARRSet(TIM0,timer);//设计基础定时器0得自动重载值
Bt_Cnt16Set(TIM0,timer);//设置基础定时器0得计数值
Bt_Run(TIM0);//启动基础定时器0
Uart_Init(UARTCH0, &stcConfig);//初始化串口0
Uart_EnableIrq(UARTCH0,UartRxIrq);//使能串口0中断
Uart_ClrStatus(UARTCH0,UartRxFull);//清除缓冲区满标志
Uart_EnableFunc(UARTCH0,UartRx);//使能串口0接收功能
Uart_EnableFunc(UARTCH0, UartTx);//使能串口0发送功能
}
void Uart0_Init(void)
{
uint16_t timer=0;
uint32_t pclk=0;
stc_uart_config_t stcConfig;//定义串口结构体
stc_uart_irq_cb_t stcUartIrqCb;//串口中断回调函数结构体
stc_uart_multimode_t stcMulti;//串口多主机模式结构体
stc_uart_baud_config_t stcBaud;//波特率配置结构体
stc_bt_config_t stcBtConfig;//基础定时器配置结构体
DDL_ZERO_STRUCT(stcUartIrqCb);//清空数据函数
DDL_ZERO_STRUCT(stcMulti);
DDL_ZERO_STRUCT(stcBaud);
DDL_ZERO_STRUCT(stcBtConfig);
Gpio_InitIOExt(0,1,GpioDirIn,FALSE,FALSE,FALSE,TRUE); //配置01引脚为输入模式RX
Gpio_InitIOExt(0,2,GpioDirOut,FALSE,FALSE,FALSE,TRUE);//配置02引脚为输出模式TX
//通道端口配置
Gpio_SetFunc_UART0_RXD_P01();//RX输入
Gpio_SetFunc_UART0_TXD_P02();//TX输出
//外设时钟使能
Clk_SetPeripheralGate(ClkPeripheralBt,TRUE);//模式0/2可以不使能
Clk_SetPeripheralGate(ClkPeripheralUart0,TRUE);//使能串口时钟
stcUartIrqCb.pfnRxIrqCb = RxIntCallback;//设置接收中断函数
stcUartIrqCb.pfnTxIrqCb = NULL;//设置发送中断为空
stcUartIrqCb.pfnRxErrIrqCb = ErrIntCallback;//设置接收错误中断函数
stcConfig.pstcIrqCb = &stcUartIrqCb;//将中断函数结构体指针赋值给串口配置
stcConfig.bTouchNvic = TRUE;//NVIC中断控制器使能标志
stcConfig.enRunMode = UartMode1;//测试项,更改此处来转换4种模式测试
//stcMulti.enMulti_mode = UartNormal;//测试项,更改此处来转换多主机模式,mode2/3才有多主机模式
stcConfig.pstcMultiMode = &stcMulti;//将中断回调函数结构体指针赋值给串口配置结构体
stcBaud.bDbaud = 0u;//不使能
stcBaud.u32Baud = 9600u;//设置波特率为9600bps
stcBaud.u8Mode = UartMode1; //计算波特率需要模式参数
pclk = Clk_GetPClkFreq();//获取外设始终频率
timer=Uart_SetBaudRate(UARTCH0,pclk,&stcBaud);//计算波特率对应得定时器
stcBtConfig.enMD = BtMode2;//基础定时器模式为Mode2
stcBtConfig.enCT = BtTimer;//基础定时器工作在定时器模式
Bt_Init(TIM0, &stcBtConfig);//调用basetimer0设置函数产生波特率
Bt_ARRSet(TIM0,timer);//设计基础定时器0得自动重载值
Bt_Cnt16Set(TIM0,timer);//设置基础定时器0得计数值
Bt_Run(TIM0);//启动基础定时器0
Uart_Init(UARTCH0, &stcConfig);//初始化串口0
Uart_EnableIrq(UARTCH0,UartRxIrq);//使能串口0中断
Uart_ClrStatus(UARTCH0,UartRxFull);//清除缓冲区满标志
Uart_EnableFunc(UARTCH0,UartRx);//使能串口0接收功能
Uart_EnableFunc(UARTCH0, UartTx);//使能串口0发送功能
}

问答
赞0
评论
2026-02-26
赞0
评论
2026-02-25
赞0
评论
2026-02-25
您需要登录后才可以回复 登录 | 注册