打印
[技术问答]

HC32F005串口的问题??

[复制链接]
1810|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我只是想实现一下串口的收发,准确无误,为什么这么难?波特率为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);

}
    我们看看串口调试助手的回复。


        我想知道你们是咋搞的?

使用特权

评论回复
沙发
hulai123456| | 2023-1-5 11:04 | 只看该作者
//while循环中:
while(1)
{
uint8_t i;
        check** =0 ;

if(u8Rx**)
{
        for(i=0;i<u8Rx**;i++)
        {
                Uart_SendDataPoll(M0P_UART1,u8RxData[i]);
        }
}
u8Rx**=0;
}



//UART1中断服务程序中:
    if(TRUE == Uart_GetStatus(M0P_UART1, UartRC))
    {
        Uart_ClrStatus(M0P_UART1, UartRC);

        u8RxData[u8Rx**] = Uart_ReceiveData(M0P_UART1);

        u8Rx**++;
    }

使用特权

评论回复
板凳
hulai123456| | 2023-1-5 11:14 | 只看该作者
上述代码中
while循环的if语句中,开始最好先加个延迟;
其次 u8RxData 数组最好足够大,不然如果输入数值多的话可能会超出;
最后,加个清除 u8RxData 数组内容的函数void Clear_u8RxData(void)放在while循环末尾会更好。
以上为我的拙见,欢迎批评;

使用特权

评论回复
地板
单片小菜|  楼主 | 2023-1-9 11:09 | 只看该作者
现在是收到的数据不对

使用特权

评论回复
5
wubangmi| | 2023-1-9 11:21 | 只看该作者
我觉得你用uartmode1会有惊喜

使用特权

评论回复
6
单片小菜|  楼主 | 2023-1-9 18:08 | 只看该作者
wubangmi 发表于 2023-1-9 11:21
我觉得你用uartmode1会有惊喜

我试试看,看看有啥惊喜。

使用特权

评论回复
7
豌豆爹| | 2023-1-10 11:03 | 只看该作者
用了uartmode1楼主惊喜吗

使用特权

评论回复
8
单片小菜|  楼主 | 2023-1-11 17:41 | 只看该作者
豌豆爹 发表于 2023-1-10 11:03
用了uartmode1楼主惊喜吗

必须的

使用特权

评论回复
9
朝生| | 2023-1-13 16:58 | 只看该作者
hulai123456 发表于 2023-1-5 11:14
上述代码中
while循环的if语句中,开始最好先加个延迟;
其次 u8RxData 数组最好足够大,不然如果输入数值 ...

跟延时没有关系吧,正常来说收到立马发出去是没有问题的。

使用特权

评论回复
10
软核硬核| | 2023-1-13 16:58 | 只看该作者
https://bbs.21ic.com/icview-3276552-1-1.html

使用特权

评论回复
11
芯路例程| | 2023-1-13 16:59 | 只看该作者
这种简单的例程官方应该是有提供的吧。

使用特权

评论回复
12
tpgf| | 2023-2-2 13:25 | 只看该作者
看着像是数据格式发送方和接收方不一样啊

使用特权

评论回复
13
nawu| | 2023-2-2 13:32 | 只看该作者
如果每次接受到的数据都不同 那么建议楼主在发送数据的时候加一个延时

使用特权

评论回复
14
aoyi| | 2023-2-2 13:39 | 只看该作者
可以看看确认波特率是不是9600  这个用示波器就能搞定

使用特权

评论回复
15
单片小菜|  楼主 | 2023-2-2 14:49 | 只看该作者
已经搞定,可以结贴了

使用特权

评论回复
16
zljiu| | 2023-2-2 15:06 | 只看该作者
wubangmi 发表于 2023-1-9 11:21
我觉得你用uartmode1会有惊喜

我还是没有看明白 从哪里能看出来楼主用的是 什么模式呢

使用特权

评论回复
17
gwsan| | 2023-2-2 15:33 | 只看该作者
单片小菜 发表于 2023-1-9 11:09
现在是收到的数据不对

用示波器看看发送的数据是不是对的啊 因为你不能肯定发送的就是对的

使用特权

评论回复
18
tfqi| | 2023-2-2 15:46 | 只看该作者
gwsan 发表于 2023-2-2 15:33
用示波器看看发送的数据是不是对的啊 因为你不能肯定发送的就是对的

楼上说的很有道理  需要有确定的证据表明发送方没有问题

使用特权

评论回复
19
十年江湖心| | 2023-3-31 09:28 | 只看该作者
单片小菜 发表于 2023-2-2 14:49
已经搞定,可以结贴了

想知道楼主是怎么搞定的,我刚接触华大的,确实看不明白,感谢楼主

使用特权

评论回复
20
kkzz| | 2023-4-7 09:58 | 只看该作者
这个可能时钟配置的不准确的              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:资深专家
简介:丰富的嵌入式软硬件开发管理经验; 丰富的项目管理经验并具备敏锐的市场嗅觉; 丰富的产品的供应链资源及工厂管控能力; 具备很强的产品落地经验(从产品企划到产品量产);

107

主题

2308

帖子

9

粉丝