本帖最后由 tbbt 于 2022-8-7 23:07 编辑
用PD0和PD1设置为UART1做485通讯,现在和电脑连接能收到正确的数据,但是发送给电脑的数据误码
///< UART配置
void App_UartCfg(void)
{
stc_uart_cfg_t stcCfg;
DDL_ZERO_STRUCT(stcCfg);
// 开启外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);///<使能uart1模块时钟
///<UART Init
stcCfg.enRunMode = UartMskMode1; ///<模式3
stcCfg.enStopBit = UartMsk1bit; ///<1bit停止位
stcCfg.enMmdorCk = UartMskEven; ///<偶检验
stcCfg.stcBaud.u32Baud = 19200; ///<波特率9600
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; ///<通道采样分频配置
stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); ///<获得外设时钟(PCLK)频率值
Uart_Init(M0P_UART1, &stcCfg); ///<串口初始化
///<UART中断使能
Uart_ClrStatus(M0P_UART1,UartRC); ///<清接收请求
Uart_ClrStatus(M0P_UART1,UartTC); ///<清接收请求
Uart_EnableIrq(M0P_UART1,UartRxIrq); ///<使能串口接收中断
Uart_EnableIrq(M0P_UART1,UartTxIrq); ///<使能串口接收中断
EnableNvic(UART1_IRQn, IrqLevel2, TRUE); ///<系统中断使能
}
//UART1中断函数
void Uart1_IRQHandler(void)
{
if(Uart_GetStatus(M0P_UART1, UartRC)) //UART1数据接收
{
Uart_ClrStatus(M0P_UART1, UartRC); //清中断状态位
rbuf[rin]= Uart_ReceiveData(M0P_UART1); //接收数据字节
if (rin<127) rin++;
}
if(Uart_GetStatus(M0P_UART1, UartTC)) //UART1数据发送
{
Uart_ClrStatus(M0P_UART1, UartTC); //清中断状态位
sendok=0;;
}
}
void mysend(void) {
char i;
RE1;
for (i=0;i<slen;i++) {
sendok=1;
Uart_SendDataIt(M0P_UART1, sbuf);
while(sendok) ;
}
Delay_ms(5);
RE0;
}
|