HC32F005串口的问题??
我只是想实现一下串口的收发,准确无误,为什么这么难?波特率为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)!=Ok)
// {
// Check** = 1;//奇偶校验出错
// }
// else
// {
// Uart_SetTb8(M0P_UART1,UartEven,u8RxData);
Uart_SendDataPoll(M0P_UART1,u8RxData);
// Uart_SetTb8(M0P_UART1,UartEven,u8RxData);
Uart_SendDataPoll(M0P_UART1,u8RxData);
// }
}
}
}///< UART1 中断服务函数
void Uart1_IRQHandler(void)
{
if(TRUE == Uart_GetStatus(M0P_UART1, UartRC))
{
Uart_ClrStatus(M0P_UART1, UartRC);
u8RxData = 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);
} 我们看看串口调试助手的回复。
我想知道你们是咋搞的?
//while循环中:
while(1)
{
uint8_t i;
check** =0 ;
if(u8Rx**)
{
for(i=0;i<u8Rx**;i++)
{
Uart_SendDataPoll(M0P_UART1,u8RxData);
}
}
u8Rx**=0;
}
//UART1中断服务程序中:
if(TRUE == Uart_GetStatus(M0P_UART1, UartRC))
{
Uart_ClrStatus(M0P_UART1, UartRC);
u8RxData = Uart_ReceiveData(M0P_UART1);
u8Rx**++;
} 上述代码中
while循环的if语句中,开始最好先加个延迟;
其次 u8RxData 数组最好足够大,不然如果输入数值多的话可能会超出;
最后,加个清除 u8RxData 数组内容的函数void Clear_u8RxData(void)放在while循环末尾会更好。
以上为我的拙见,欢迎批评;
现在是收到的数据不对 我觉得你用uartmode1会有惊喜 wubangmi 发表于 2023-1-9 11:21
我觉得你用uartmode1会有惊喜
我试试看,看看有啥惊喜。 用了uartmode1楼主惊喜吗 豌豆爹 发表于 2023-1-10 11:03
用了uartmode1楼主惊喜吗
必须的 hulai123456 发表于 2023-1-5 11:14
上述代码中
while循环的if语句中,开始最好先加个延迟;
其次 u8RxData 数组最好足够大,不然如果输入数值 ...
跟延时没有关系吧,正常来说收到立马发出去是没有问题的。 https://bbs.21ic.com/icview-3276552-1-1.html 这种简单的例程官方应该是有提供的吧。 看着像是数据格式发送方和接收方不一样啊 如果每次接受到的数据都不同 那么建议楼主在发送数据的时候加一个延时 可以看看确认波特率是不是9600这个用示波器就能搞定 已经搞定,可以结贴了
wubangmi 发表于 2023-1-9 11:21
我觉得你用uartmode1会有惊喜
我还是没有看明白 从哪里能看出来楼主用的是 什么模式呢 单片小菜 发表于 2023-1-9 11:09
现在是收到的数据不对
用示波器看看发送的数据是不是对的啊 因为你不能肯定发送的就是对的 gwsan 发表于 2023-2-2 15:33
用示波器看看发送的数据是不是对的啊 因为你不能肯定发送的就是对的
楼上说的很有道理需要有确定的证据表明发送方没有问题 单片小菜 发表于 2023-2-2 14:49
已经搞定,可以结贴了
想知道楼主是怎么搞定的,我刚接触华大的,确实看不明白,感谢楼主 这个可能时钟配置的不准确的
页:
[1]
2