相关程序
配置中断相关内容
stcUartIrqCb.pfnRxIrqCb = RxIntCallback; //配置接收中断回调函数
stcUartIrqCb.pfnTxIrqCb = NULL;
stcUartIrqCb.pfnRxErrIrqCb = ErrIntCallback; //配置错误中断回调函数
stcConfig.pstcIrqCb = &stcUartIrqCb; //配置中断服务函数
stcConfig.bTouchNvic = TRUE; //允许中断
配置通讯相关内容
stcConfig.enRunMode = UartMode3; //测试项,更改此处来转换4种模式测试
stcMulti.enMulti_mode = UartNormal; //测试项,更改此处来转换多主机模式,mode2/3才有多主机模//式,此处配置为正常工作模式
stcConfig.pstcMultiMode = &stcMulti; //配置正常或多机工作模式
配置波特率
stcBaud.bDbaud = 0u; //双倍波特率功能
stcBaud.u32Baud = 9600u; //更新波特率位置
stcBaud.u8Mode = UartMode3; //计算波特率需要模式参数
pclk = Clk_GetPClkFreq(); //获得PCLK
timer=Uart_SetBaudRate(UARTCH1,pclk,&stcBaud); //计算波特率所需TIMER值
stcBtConfig.enMD = BtMode2; //自动重装载16位计数器/定时器
stcBtConfig.enCT = BtTimer; //定时模式
Bt_Init(TIM1, &stcBtConfig); //调用basetimer1设置函数产生波特率
Bt_ARRSet(TIM1,timer); //配置重载值
Bt_Cnt16Set(TIM1,timer); //配置计数值
Bt_Run(TIM1); //启动定时
串口及接收中断配置
Uart_Init(UARTCH1, &stcConfig); //串口1初始化
Uart_EnableIrq(UARTCH1,UartRxIrq); //允许串口1接收中断
Uart_ClrStatus(UARTCH1,UartRxFull); //清串口1接收中断标志
Uart_EnableFunc(UARTCH1,UartRx); //串口1接收中断使能
接收中断回调函数
void RxIntCallback(void)
{
u8RxData[1]=M0P_UART1->SBUF; //取出接收数据
u8Rx** = 1; //接收标志置1
}
主逻辑
while(1)
{
Check** = 0; //校验出错标志清零
if(u8Rx**) //有接收数据进入,无数据跳过
{
u8Rx** = 0; //接收标志清零
if(Uart_CheckEvenOrOdd(UARTCH1,Even,u8RxData[1])!=Ok) //检查偶检验是否成功
{
Check** = 1; //偶校验出错
}
else
{
Uart_SetTb8(UARTCH1,Even,u8RxData[0]); //根据数据设置TB8位
Uart_SendData(UARTCH1,u8RxData[0]); //发送数据
Uart_SetTb8(UARTCH1,Even,u8RxData[1]);
Uart_SendData(UARTCH1,u8RxData[1]);
}
}
}
|