21ic问答首页 - HC32F003C4Pa
HC32F003C4Pa
longzhengbing12021-01-14
用官网例程UART1 改UART0 只能发生不能接受。不知到什么情况。long:
//串口引脚配置
static void App_PortInit(void)
{
stc_gpio_cfg_t stcGpioCfg;
DDL_ZERO_STRUCT(stcGpioCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟
///<TX
stcGpioCfg.enDir = GpioDirOut;
Gpio_Init(GpioPort1, GpioPin4, &stcGpioCfg);
Gpio_SetAfMode(GpioPort1, GpioPin4, GpioAf6); //配置P35 端口为URART1_TX
///<RX
stcGpioCfg.enDir = GpioDirIn;
Gpio_Init(GpioPort1, GpioPin5, &stcGpioCfg);
Gpio_SetAfMode(GpioPort1, GpioPin5, GpioAf5); //配置P36 端口为URART1_RX
}
static void _UartBaudCfg(void)
{
uint16_t timer=0;
stc_uart_baud_cfg_t stcBaud;
stc_bt_cfg_t stcBtCfg;
DDL_ZERO_STRUCT(stcBaud);
DDL_ZERO_STRUCT(stcBtCfg);
//外设时钟使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);//模式0/2可以不使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE);
stcBaud.bDbaud = 0u;//双倍波特率功能
stcBaud.u32Baud = 9600u;//更新波特率位置
stcBaud.enMode = UartMode3; //计算波特率需要模式参数
stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); //获取PCLK
timer = Uart_SetBaudRate(M0P_UART0, &stcBaud);
stcBtCfg.enMD = BtMode2;
stcBtCfg.enCT = BtTimer;
Bt_Init(TIM0, &stcBtCfg);//调用basetimer1设置函数产生波特率
Bt_ARRSet(TIM0,timer);
Bt_Cnt16Set(TIM0,timer);
Bt_Run(TIM0);
}
static void App_UartInit(void)
{
stc_uart_cfg_t stcCfg;
_UartBaudCfg();
stcCfg.enRunMode = UartMode3;//测试项,更改此处来转换4种模式测试
Uart_Init(M0P_UART0, &stcCfg);
///< UART中断配置
Uart_EnableIrq(M0P_UART0, UartRxIrq);
Uart_ClrStatus(M0P_UART0, UartRC);
EnableNvic(UART0_IRQn, IrqLevel3, TRUE);
}
/******************************************************************************
* EOF (not truncated)
*********************
///< UART0 中断服务函数
void Uart0_IRQHandler(void)
{
//delay1ms(500);
if(TRUE == Uart_GetStatus(M0P_UART0, UartRC))
{
Uart_ClrStatus(M0P_UART0, UartRC);
u8RxData[1] = Uart_ReceiveData(M0P_UART0);
u8Rx** = 1;
}
}
//串口引脚配置
static void App_PortInit(void)
{
stc_gpio_cfg_t stcGpioCfg;
DDL_ZERO_STRUCT(stcGpioCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟
///<TX
stcGpioCfg.enDir = GpioDirOut;
Gpio_Init(GpioPort1, GpioPin4, &stcGpioCfg);
Gpio_SetAfMode(GpioPort1, GpioPin4, GpioAf6); //配置P35 端口为URART1_TX
///<RX
stcGpioCfg.enDir = GpioDirIn;
Gpio_Init(GpioPort1, GpioPin5, &stcGpioCfg);
Gpio_SetAfMode(GpioPort1, GpioPin5, GpioAf5); //配置P36 端口为URART1_RX
}
static void _UartBaudCfg(void)
{
uint16_t timer=0;
stc_uart_baud_cfg_t stcBaud;
stc_bt_cfg_t stcBtCfg;
DDL_ZERO_STRUCT(stcBaud);
DDL_ZERO_STRUCT(stcBtCfg);
//外设时钟使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);//模式0/2可以不使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE);
stcBaud.bDbaud = 0u;//双倍波特率功能
stcBaud.u32Baud = 9600u;//更新波特率位置
stcBaud.enMode = UartMode3; //计算波特率需要模式参数
stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); //获取PCLK
timer = Uart_SetBaudRate(M0P_UART0, &stcBaud);
stcBtCfg.enMD = BtMode2;
stcBtCfg.enCT = BtTimer;
Bt_Init(TIM0, &stcBtCfg);//调用basetimer1设置函数产生波特率
Bt_ARRSet(TIM0,timer);
Bt_Cnt16Set(TIM0,timer);
Bt_Run(TIM0);
}
static void App_UartInit(void)
{
stc_uart_cfg_t stcCfg;
_UartBaudCfg();
stcCfg.enRunMode = UartMode3;//测试项,更改此处来转换4种模式测试
Uart_Init(M0P_UART0, &stcCfg);
///< UART中断配置
Uart_EnableIrq(M0P_UART0, UartRxIrq);
Uart_ClrStatus(M0P_UART0, UartRC);
EnableNvic(UART0_IRQn, IrqLevel3, TRUE);
}
/******************************************************************************
* EOF (not truncated)
*********************
///< UART0 中断服务函数
void Uart0_IRQHandler(void)
{
//delay1ms(500);
if(TRUE == Uart_GetStatus(M0P_UART0, UartRC))
{
Uart_ClrStatus(M0P_UART0, UartRC);
u8RxData[1] = Uart_ReceiveData(M0P_UART0);
u8Rx** = 1;
}
}
赞0
评论
2021-01-15
您需要登录后才可以回复 登录 | 注册