[技术问答] HC32F460串口发送异常

[复制链接]
 楼主| 茂xiang 发表于 2021-10-1 13:13 | 显示全部楼层 |阅读模式
HC32F460,MCU可以接收到串口工具发送的数据,但是MCU发送电脑收不到,参考华大例程。
  1. #include "project.h"

  2. #define USART_CH                        (M4_USART3)
  3. #define USART_BAUDRATE                  (115200ul)

  4. #define USART_TX_PORT                   (PortC)
  5. #define USART_TX_PIN                    (Pin07)
  6. #define USART_TX_FUNC                   (Func_Usart3_Tx)

  7. #define USART_RX_PORT                   (PortC)
  8. #define USART_RX_PIN                    (Pin08)
  9. #define USART_RX_FUNC                   (Func_Usart3_Rx)

  10. #define USART_RI_NUM                    (INT_USART3_RI)                //接收中断
  11. #define USART_EI_NUM                    (INT_USART3_EI)                //Empty中断(R/T?)
  12. #define USART_TI_NUM                    (INT_USART3_TI)                //发送中断
  13. #define USART_TCI_NUM                   (INT_USART3_TCI)        //发送完成中断

  14. void UART_InBuff(uint8_t UART);
  15. void USART3_SendStr(uint8_t *SendBuf,uint16_t length);
  16. uint8_t hello[]="hello Aramis \r\n";
  17. #define poweron "system poweron\r\n"
  18. /*******************************************************************************
  19. ** \brief USART RX irq callback function.
  20. **
  21. ** \param [in] None
  22. **
  23. ** \retval None
  24. **
  25. ******************************************************************************/
  26. static uint16_t m_u16RxData;
  27. static void UsartRxIrqCallback(void)
  28. {
  29.     m_u16RxData = USART_RecData(USART_CH);
  30.         while (Reset == USART_GetStatus(USART_CH, UsartTxEmpty));
  31.         USART_SendData(USART_CH, m_u16RxData);
  32.         USART3_SendStr(hello,14);
  33. //    USART_FuncCmd(USART_CH, UsartTxAndTxEmptyInt, Enable);
  34. }

  35. void main(){
  36.         en_result_t enRet = Ok;
  37.     stc_irq_regi_conf_t stcIrqRegiCfg;
  38.     uint32_t u32Fcg1Periph = PWC_FCG1_PERIPH_USART1 | PWC_FCG1_PERIPH_USART2 | \
  39.                              PWC_FCG1_PERIPH_USART3 | PWC_FCG1_PERIPH_USART4;
  40.     const stc_usart_uart_init_t stcInitCfg = {
  41.         UsartIntClkCkNoOutput,
  42.         UsartClkDiv_1,
  43.         UsartDataBits8,
  44.         UsartDataLsbFirst,
  45.         UsartOneStopBit,
  46.         UsartParityNone,
  47.         UsartSamleBit8,
  48.         UsartStartBitFallEdge,
  49.         UsartRtsEnable,
  50.     };
  51.        
  52.        
  53.         sysCLK_Init();                                                                        //PCLK0 40MHz
  54.         /* Enable peripheral clock */
  55.     PWC_Fcg1PeriphClockCmd(u32Fcg1Periph, Enable);
  56.          /* Initialize USART IO */
  57.     PORT_SetFunc(USART_RX_PORT, USART_RX_PIN, USART_RX_FUNC, Disable);
  58.     PORT_SetFunc(USART_TX_PORT, USART_TX_PIN, USART_TX_FUNC, Disable);
  59.         USART_UART_Init(USART_CH, &stcInitCfg);
  60.         USART_SetBaudrate(USART_CH, USART_BAUDRATE);
  61.        
  62.         /* Set USART RX IRQ */
  63.     stcIrqRegiCfg.enIRQn = Int000_IRQn;
  64.     stcIrqRegiCfg.pfnCallback = &UsartRxIrqCallback;
  65.     stcIrqRegiCfg.enIntSrc = USART_RI_NUM;
  66.     enIrqRegistration(&stcIrqRegiCfg);
  67.     NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT);
  68.     NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
  69.     NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);
  70.        
  71.         /*Enable RX && RX interupt function*/
  72.     USART_FuncCmd(USART_CH, UsartRx, Enable);
  73.     USART_FuncCmd(USART_CH, UsartRxInt, Enable);
  74.        
  75.         USART3_SendStr(hello,sizeof(hello)-1);
  76.         USART3_SendStr(poweron,sizeof(poweron)-1);
  77.         while(1){
  78.                
  79.                
  80.         }
  81. }

  82. #ifndef UARTBUFF_SIZE
  83. #define UARTBUFF_SIZE   200                            //UART缓冲区大小,发送心跳返回长度290(AAAA反馈),但不影响判断_ack,这里定义280...
  84. #endif

  85. uint8_t UARTBuff[UARTBUFF_SIZE]={0};                  //定义UART缓冲队列数组(FIFO)
  86. //signed char UART_IndexW=0;                //UART缓冲队列写入指针(头指针)
  87. //signed char UART_IndexR=0;                //UART缓冲队列读取指针(尾指针)
  88. uint16_t UART_Count=0;                                 //UART缓冲队列数据数

  89. /*******************************************************************************
  90. *名    称:USART1_SendStr
  91. *功    能:UART发送一定长度的数据
  92. *入口参数:*SendBuf--发送数组指针  length--发送长度
  93. *说    明:
  94. *******************************************************************************/
  95. void USART3_SendStr(uint8_t *SendBuf,uint16_t length)
  96. {
  97.         uint16_t i = 0;
  98.    
  99.     while(length--){                                                            /* Loop until the end of transmission */
  100.                 while (Reset == USART_GetStatus(USART_CH, UsartTxEmpty));  /* Warit Tx data register empty */
  101.         USART_SendData(USART_CH, SendBuf[i++]);
  102.         }
  103. }


 楼主| 茂xiang 发表于 2021-10-1 13:33 | 显示全部楼层
TX忘记使能了,使能之后就可以了
USART_FuncCmd(USART_CH, UsartTx, Enable);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

13

帖子

1

粉丝
快速回复 返回顶部 返回列表