我只是想实现一下串口的收发,准确无误,为什么这么难?波特率为9600,外部晶振8M。
附上代码:
int32_t main(void)
{
///< UART 端口初始化
App_PortInit();
///< UART 初始化
App_UartInit();
while(1)
{
Check** = 0;
if(u8Rx**)
{
u8Rx** = 0;
// if(Uart_CheckEvenOrOdd(M0P_UART1,UartEven,u8RxData[1])!=Ok)
// {
// Check** = 1;//奇偶校验出错
// }
// else
// {
// Uart_SetTb8(M0P_UART1,UartEven,u8RxData[0]);
Uart_SendDataPoll(M0P_UART1,u8RxData[0]);
// Uart_SetTb8(M0P_UART1,UartEven,u8RxData[1]);
Uart_SendDataPoll(M0P_UART1,u8RxData[1]);
// }
}
}
}
///< UART1 中断服务函数
void Uart1_IRQHandler(void)
{
if(TRUE == Uart_GetStatus(M0P_UART1, UartRC))
{
Uart_ClrStatus(M0P_UART1, UartRC);
u8RxData[1] = Uart_ReceiveData(M0P_UART1);
u8Rx** = 1;
// ucTemp = Uart_ReceiveData(M0P_UART1);
// Get_usart1_data(ucTemp);
}
}
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(SysctrlPeripheralUart1,TRUE);
stcBaud.bDbaud = 0u;//双倍波特率功能
stcBaud.u32Baud = 9600u;//更新波特率位置
stcBaud.enMode = UartMode3; //计算波特率需要模式参数
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);
}
我们看看串口调试助手的回复。
我想知道你们是咋搞的?
|