打印

hc32f460串口接收不到数据

[复制链接]
5355|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fahuo|  楼主 | 2024-5-6 09:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的串口3进行通讯,用示波器看收发都有正确的波形,但RDR寄存器一直是0,接收不到数据,一直再发送中断和接收超时中断,定时器周期我设置的是20ms,而且示波器看数据收发间隔不到2ms,请问这是怎么回事

使用特权

评论回复
沙发
chenqianqian| | 2024-5-11 08:01 | 只看该作者
MCU和什么通信?你示波器量的是MCU引脚端的信号吗?

使用特权

评论回复
板凳
yang377156216| | 2024-5-11 15:54 | 只看该作者
大概率是超时配置错误或者引脚功能配置不对了。

使用特权

评论回复
地板
gouguoccc| | 2024-5-13 08:08 | 只看该作者
多半还是代码问题,贴上来大家看看。

使用特权

评论回复
5
yangxiaor520| | 2024-5-15 08:19 | 只看该作者
你数据接收是怎么处理的中断还是查询?

使用特权

评论回复
6
huquanz711| | 2024-5-21 13:51 | 只看该作者
看一下是不是你的配置有问题

使用特权

评论回复
7
芯路例程| | 2024-5-23 19:07 | 只看该作者
有没可能没使能串口接收中断?

使用特权

评论回复
8
LinkMe| | 2024-5-23 19:41 | 只看该作者
使用的是官方例程吗?接线是什么样的?

使用特权

评论回复
9
fahuo|  楼主 | 2024-5-28 11:16 | 只看该作者
chenqianqian 发表于 2024-5-11 08:01
MCU和什么通信?你示波器量的是MCU引脚端的信号吗?

两个mcu通讯,示波器量的是mcu引脚的信号

使用特权

评论回复
10
fahuo|  楼主 | 2024-5-28 11:17 | 只看该作者
yang377156216 发表于 2024-5-11 15:54
大概率是超时配置错误或者引脚功能配置不对了。

但是我串口直接通讯可以,485就不行,有接收波形

使用特权

评论回复
11
fahuo|  楼主 | 2024-5-28 11:19 | 只看该作者
gouguoccc 发表于 2024-5-13 08:08
多半还是代码问题,贴上来大家看看。
static void Usart3RxIrqCallback(void)
{
        read = USART_RecData(USART3_CH);
        if(RXflage == false)
        {       
                RXbuff[readdata] = read;               
                if((RXbuff[0] & 0xFF) == 0xAC)
                {
                        readdata++;
                        if(readdata >= 8)
                        {
                                readdata = 0;
                                RXflage = true;
                        }
                }
        }
}

static void Usart3TxIrqCallback(void)
{
        if(TXflage == true)
        {                USART_SendData(USART3_CH, TXbuff[writedata+1]);
                writedata++;
                if(writedata >= 7)
                {
                        writedata = 0;
                        TXflage = false;
                }
        }
        else if(TXflage == false)
        {
                //USART_FuncCmd(USART3_CH, UsartTxEmptyInt, Disable);        
                //USART_FuncCmd(USART3_CH, UsartTxCmpltInt, Enable);
                while (Reset == USART_GetStatus(USART3_CH, UsartTxComplete))
                {
                }
                EN_485_L;
        }
}

static void Usart3ErrIrqCallback(void)
{
        if (Set == USART_GetStatus(USART3_CH, UsartFrameErr))
      USART_ClearStatus(USART3_CH, UsartFrameErr);
   
    if (Set == USART_GetStatus(USART3_CH, UsartParityErr))
      USART_ClearStatus(USART3_CH, UsartParityErr);
   
    if (Set == USART_GetStatus(USART3_CH, UsartOverrunErr))
      USART_ClearStatus(USART3_CH, UsartOverrunErr);
   
    if (Set == USART_GetStatus(USART3_CH, UsartRxNoEmpty))
      USART_ClearStatus(USART3_CH, UsartRxNoEmpty);
   
    if (Set == USART_GetStatus(USART3_CH, UsartTxComplete))
      USART_ClearStatus(USART3_CH, UsartTxComplete);
   
    if (Set == USART_GetStatus(USART3_CH, UsartTxEmpty))
      USART_ClearStatus(USART3_CH, UsartTxEmpty);
   
    if (Set == USART_GetStatus(USART3_CH, UsartRxTimeOut))
      USART_ClearStatus(USART3_CH, UsartRxTimeOut);
   
    if (Set == USART_GetStatus(USART3_CH, UsartRxMpb))
      USART_ClearStatus(USART3_CH, UsartRxMpb);
}

static void Usart3TimeoutIrqCallback(void)
{
    TIMER0_Cmd(TMR_UNIT,Tim0_ChannelA,Disable);
        //USART3_CH->CR1_f.CRTOF = 1ul;
    USART_ClearStatus(USART3_CH, UsartRxTimeOut);
}

static void Usart3TxCmpltIrqCallback(void)
{
    USART_FuncCmd(USART3_CH,UsartTx,Disable);
    USART_FuncCmd(USART3_CH,UsartTxCmpltInt,Disable);
}

void Uart3_Init(void)
{
        en_result_t enRet = Ok;
        stc_irq_regi_conf_t stcIrqRegiCfg;
       
        const stc_usart_uart_init_t stcInitCfg = {
       UsartIntClkCkNoOutput,
                //UsartIntClkCkOutput,
       UsartClkDiv_64,
       UsartDataBits8,
       UsartDataLsbFirst,
       UsartOneStopBit,
       UsartParityNone,
       UsartSampleBit8,
       UsartStartBitFallEdge,
       UsartRtsEnable,
    };
       
        PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_USART3,Enable);
       
        PORT_SetFunc(USART3_RX_PORT,USART3_RX_PIN,USART3_RX_FUNC,Disable);
        PORT_SetFunc(USART3_TX_PORT,USART3_TX_PIN,USART3_TX_FUNC,Disable);
       
        enRet = USART_UART_Init(USART3_CH,&stcInitCfg);
        if(enRet != Ok)
        {
                while(1)
                {
               
                }
        }
        enRet = USART_SetBaudrate(USART3_CH,USART3_BAUDRATE);
        if(enRet != Ok)
        {
                while(1)
                {
                }
        }
               
        stcIrqRegiCfg.enIRQn = Int001_IRQn;
        stcIrqRegiCfg.pfnCallback = &Usart3RxIrqCallback;
        stcIrqRegiCfg.enIntSrc = USART3_RI_NUM;
        enIrqRegistration(&stcIrqRegiCfg);
        NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
    NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
    NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
       
        stcIrqRegiCfg.enIRQn = Int002_IRQn;
    stcIrqRegiCfg.pfnCallback = &Usart3ErrIrqCallback;
    stcIrqRegiCfg.enIntSrc = USART3_EI_NUM;
    enIrqRegistration(&stcIrqRegiCfg);
    NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
    NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
    NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
       
    stcIrqRegiCfg.enIRQn = Int008_IRQn;                     
    stcIrqRegiCfg.pfnCallback = &Usart3TimeoutIrqCallback;     
    stcIrqRegiCfg.enIntSrc = USART3_RTO_NUM;                    
    enIrqRegistration(&stcIrqRegiCfg);
    NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
    NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
    NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
       
        stcIrqRegiCfg.enIRQn = Int000_IRQn;
        stcIrqRegiCfg.pfnCallback = &Usart3TxIrqCallback;
        stcIrqRegiCfg.enIntSrc = USART3_TI_NUM;
        enIrqRegistration(&stcIrqRegiCfg);
        NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
    NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
    NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
       
    stcIrqRegiCfg.enIRQn = Int004_IRQn;
    stcIrqRegiCfg.pfnCallback = &Usart3TxCmpltIrqCallback;
    stcIrqRegiCfg.enIntSrc = USART3_TCI_NUM;
    enIrqRegistration(&stcIrqRegiCfg);
    NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);   
    NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);                        
    NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
               
        USART_FuncCmd(USART3_CH, UsartRx, Enable);
    USART_FuncCmd(USART3_CH, UsartRxInt, Enable);
        USART_FuncCmd(USART3_CH, UsartTx, Enable);
    USART_FuncCmd(USART3_CH, UsartTimeOut, Enable);
        USART_FuncCmd(USART3_CH, UsartTimeOutInt, Enable);
        USART_FuncCmd(USART3_CH, UsartTxEmptyInt, Enable);
        //USART_SetMode(USART3_CH, UsartUartMode);
}

使用特权

评论回复
12
HDSC小华MCU代理| | 2024-6-3 16:04 | 只看该作者
学到了,小华MCU全系列产品,超低功耗、通用控制、电机控制、汽车电子。提货请联系18256013035 微信同号

使用特权

评论回复
13
亚瑟| | 2024-6-28 19:42 | 只看该作者
是一个信号都接收不到吗?

使用特权

评论回复
14
亚瑟| | 2024-6-28 19:42 | 只看该作者
看看硬件连接是不是有问题

使用特权

评论回复
15
CarterERO| | 2024-6-28 22:36 | 只看该作者
也许是根本就没发送出来

使用特权

评论回复
16
suncat0504| | 2024-6-29 10:34 | 只看该作者
串口没问题,用485就出问题,那问题是不是应该在485的处理上?

使用特权

评论回复
17
szt1993| | 2024-6-30 09:07 | 只看该作者
用示波器检查一下

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝