hc32f460串口接收不到数据

[复制链接]
6690|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 来自手机 | 显示全部楼层
多半还是代码问题,贴上来大家看看。
yangxiaor520 发表于 2024-5-15 08:19 来自手机 | 显示全部楼层
你数据接收是怎么处理的中断还是查询?
huquanz711 发表于 2024-5-21 13:51 来自手机 | 显示全部楼层
看一下是不是你的配置有问题
芯路例程 发表于 2024-5-23 19:07 | 显示全部楼层
有没可能没使能串口接收中断?
LinkMe 发表于 2024-5-23 19:41 | 显示全部楼层
使用的是官方例程吗?接线是什么样的?
 楼主| fahuo 发表于 2024-5-28 11:16 | 显示全部楼层
chenqianqian 发表于 2024-5-11 08:01
MCU和什么通信?你示波器量的是MCU引脚端的信号吗?

两个mcu通讯,示波器量的是mcu引脚的信号
 楼主| fahuo 发表于 2024-5-28 11:17 | 显示全部楼层
yang377156216 发表于 2024-5-11 15:54
大概率是超时配置错误或者引脚功能配置不对了。

但是我串口直接通讯可以,485就不行,有接收波形
 楼主| fahuo 发表于 2024-5-28 11:19 | 显示全部楼层
gouguoccc 发表于 2024-5-13 08:08
多半还是代码问题,贴上来大家看看。
  1. static void Usart3RxIrqCallback(void)
  2. {
  3.         read = USART_RecData(USART3_CH);
  4.         if(RXflage == false)
  5.         {       
  6.                 RXbuff[readdata] = read;               
  7.                 if((RXbuff[0] & 0xFF) == 0xAC)
  8.                 {
  9.                         readdata++;
  10.                         if(readdata >= 8)
  11.                         {
  12.                                 readdata = 0;
  13.                                 RXflage = true;
  14.                         }
  15.                 }
  16.         }
  17. }

  18. static void Usart3TxIrqCallback(void)
  19. {
  20.         if(TXflage == true)
  21.         {                USART_SendData(USART3_CH, TXbuff[writedata+1]);
  22.                 writedata++;
  23.                 if(writedata >= 7)
  24.                 {
  25.                         writedata = 0;
  26.                         TXflage = false;
  27.                 }
  28.         }
  29.         else if(TXflage == false)
  30.         {
  31.                 //USART_FuncCmd(USART3_CH, UsartTxEmptyInt, Disable);        
  32.                 //USART_FuncCmd(USART3_CH, UsartTxCmpltInt, Enable);
  33.                 while (Reset == USART_GetStatus(USART3_CH, UsartTxComplete))
  34.                 {
  35.                 }
  36.                 EN_485_L;
  37.         }
  38. }

  39. static void Usart3ErrIrqCallback(void)
  40. {
  41.         if (Set == USART_GetStatus(USART3_CH, UsartFrameErr))
  42.       USART_ClearStatus(USART3_CH, UsartFrameErr);
  43.    
  44.     if (Set == USART_GetStatus(USART3_CH, UsartParityErr))
  45.       USART_ClearStatus(USART3_CH, UsartParityErr);
  46.    
  47.     if (Set == USART_GetStatus(USART3_CH, UsartOverrunErr))
  48.       USART_ClearStatus(USART3_CH, UsartOverrunErr);
  49.    
  50.     if (Set == USART_GetStatus(USART3_CH, UsartRxNoEmpty))
  51.       USART_ClearStatus(USART3_CH, UsartRxNoEmpty);
  52.    
  53.     if (Set == USART_GetStatus(USART3_CH, UsartTxComplete))
  54.       USART_ClearStatus(USART3_CH, UsartTxComplete);
  55.    
  56.     if (Set == USART_GetStatus(USART3_CH, UsartTxEmpty))
  57.       USART_ClearStatus(USART3_CH, UsartTxEmpty);
  58.    
  59.     if (Set == USART_GetStatus(USART3_CH, UsartRxTimeOut))
  60.       USART_ClearStatus(USART3_CH, UsartRxTimeOut);
  61.    
  62.     if (Set == USART_GetStatus(USART3_CH, UsartRxMpb))
  63.       USART_ClearStatus(USART3_CH, UsartRxMpb);
  64. }

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

  71. static void Usart3TxCmpltIrqCallback(void)
  72. {
  73.     USART_FuncCmd(USART3_CH,UsartTx,Disable);
  74.     USART_FuncCmd(USART3_CH,UsartTxCmpltInt,Disable);
  75. }

  76. void Uart3_Init(void)
  77. {
  78.         en_result_t enRet = Ok;
  79.         stc_irq_regi_conf_t stcIrqRegiCfg;
  80.        
  81.         const stc_usart_uart_init_t stcInitCfg = {
  82.        UsartIntClkCkNoOutput,
  83.                 //UsartIntClkCkOutput,
  84.        UsartClkDiv_64,
  85.        UsartDataBits8,
  86.        UsartDataLsbFirst,
  87.        UsartOneStopBit,
  88.        UsartParityNone,
  89.        UsartSampleBit8,
  90.        UsartStartBitFallEdge,
  91.        UsartRtsEnable,
  92.     };
  93.        
  94.         PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_USART3,Enable);
  95.        
  96.         PORT_SetFunc(USART3_RX_PORT,USART3_RX_PIN,USART3_RX_FUNC,Disable);
  97.         PORT_SetFunc(USART3_TX_PORT,USART3_TX_PIN,USART3_TX_FUNC,Disable);
  98.        
  99.         enRet = USART_UART_Init(USART3_CH,&stcInitCfg);
  100.         if(enRet != Ok)
  101.         {
  102.                 while(1)
  103.                 {
  104.                
  105.                 }
  106.         }
  107.         enRet = USART_SetBaudrate(USART3_CH,USART3_BAUDRATE);
  108.         if(enRet != Ok)
  109.         {
  110.                 while(1)
  111.                 {
  112.                 }
  113.         }
  114.                
  115.         stcIrqRegiCfg.enIRQn = Int001_IRQn;
  116.         stcIrqRegiCfg.pfnCallback = &Usart3RxIrqCallback;
  117.         stcIrqRegiCfg.enIntSrc = USART3_RI_NUM;
  118.         enIrqRegistration(&stcIrqRegiCfg);
  119.         NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
  120.     NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
  121.     NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
  122.        
  123.         stcIrqRegiCfg.enIRQn = Int002_IRQn;
  124.     stcIrqRegiCfg.pfnCallback = &Usart3ErrIrqCallback;
  125.     stcIrqRegiCfg.enIntSrc = USART3_EI_NUM;
  126.     enIrqRegistration(&stcIrqRegiCfg);
  127.     NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
  128.     NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
  129.     NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
  130.        
  131.     stcIrqRegiCfg.enIRQn = Int008_IRQn;                     
  132.     stcIrqRegiCfg.pfnCallback = &Usart3TimeoutIrqCallback;     
  133.     stcIrqRegiCfg.enIntSrc = USART3_RTO_NUM;                    
  134.     enIrqRegistration(&stcIrqRegiCfg);
  135.     NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
  136.     NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
  137.     NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
  138.        
  139.         stcIrqRegiCfg.enIRQn = Int000_IRQn;
  140.         stcIrqRegiCfg.pfnCallback = &Usart3TxIrqCallback;
  141.         stcIrqRegiCfg.enIntSrc = USART3_TI_NUM;
  142.         enIrqRegistration(&stcIrqRegiCfg);
  143.         NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
  144.     NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
  145.     NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
  146.        
  147.     stcIrqRegiCfg.enIRQn = Int004_IRQn;
  148.     stcIrqRegiCfg.pfnCallback = &Usart3TxCmpltIrqCallback;
  149.     stcIrqRegiCfg.enIntSrc = USART3_TCI_NUM;
  150.     enIrqRegistration(&stcIrqRegiCfg);
  151.     NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);   
  152.     NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);                        
  153.     NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
  154.                
  155.         USART_FuncCmd(USART3_CH, UsartRx, Enable);
  156.     USART_FuncCmd(USART3_CH, UsartRxInt, Enable);
  157.         USART_FuncCmd(USART3_CH, UsartTx, Enable);
  158.     USART_FuncCmd(USART3_CH, UsartTimeOut, Enable);
  159.         USART_FuncCmd(USART3_CH, UsartTimeOutInt, Enable);
  160.         USART_FuncCmd(USART3_CH, UsartTxEmptyInt, Enable);
  161.         //USART_SetMode(USART3_CH, UsartUartMode);
  162. }
HDSC小华MCU代理 发表于 2024-6-3 16:04 | 显示全部楼层
学到了,小华MCU全系列产品,超低功耗、通用控制、电机控制、汽车电子。提货请联系18256013035 微信同号
亚瑟 发表于 2024-6-28 19:42 | 显示全部楼层
是一个信号都接收不到吗?
亚瑟 发表于 2024-6-28 19:42 | 显示全部楼层
看看硬件连接是不是有问题
CarterERO 发表于 2024-6-28 22:36 | 显示全部楼层
也许是根本就没发送出来
suncat0504 发表于 2024-6-29 10:34 | 显示全部楼层
串口没问题,用485就出问题,那问题是不是应该在485的处理上?
szt1993 发表于 2024-6-30 09:07 来自手机 | 显示全部楼层
用示波器检查一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部