牛卧堂MCU技术交流

标题: NUC123SD4A UART1發送資料錯誤 [打印本页]

作者: 匿名    时间: 2020-11-12 09:57
标题: NUC123SD4A UART1發送資料錯誤
您好,我依照UART0範例改寫成UART1,接腳為PB4, PB5,發送出來的數據都不對,不曉得還少了什麼步驟?謝謝各位

1。
/* Enable UART1 module clock */
CLK_EnableModuleClock(UART1_MODULE);
/* Select UART module clock source as HXT and UART module clock divider as 1 */
CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));

2。

/* Set GPB multi-function pins for UART1 RXD(PB.4) and TXD(PB.5) */
    SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB4_Msk | SYS_GPB_MFP_PB5_Msk);
    SYS->GPB_MFP |= (SYS_GPB_MFP_PB4_UART1_RXD | SYS_GPB_MFP_PB5_UART1_TXD);

SYS->ALT_MFP &= ~(SYS_ALT_MFP_PB4_Msk | SYS_ALT_MFP_PB5_Msk);
    SYS->ALT_MFP |= (SYS_ALT_MFP_PB4_UART1_RXD | SYS_ALT_MFP_PB5_UART1_TXD);

3。
/* Reset UART0 module */
    SYS_ResetModule(UART1_RST);
    /* Configure UART0 and set UART0 Baudrate */
    UART_Open(UART1, 115200);
  
    /* Configure UART0 disable hardware flow control */
   UART_DisableFlowCtrl(UART1);

    /* Enable the UART0 interrupt */
    UART_EnableInt(UART1, UART_IER_RDA_IEN_Msk);
   NVIC_EnableIRQ(UART1_IRQn);


作者: admin    时间: 2020-11-12 14:50
请问你是怎么测试的.你的代码我这边测试了没问题
作者: mento    时间: 2020-11-13 14:12
admin 发表于 2020-11-12 14:50
请问你是怎么测试的.你的代码我这边测试了没问题

謝謝您~確認代碼無誤,我再好好的檢查硬體,看有什麼問題!
作者: mento    时间: 2020-11-17 17:45
您好,依前述程式碼已可正常發送,但接收時中斷向量沒有反應,已確認硬體沒有問題
若是改成
UART_EnableInt(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk));
增加了Tx empty interrupt是有進入中斷向量的,所以確認中斷是有啟動的,
但唯獨對於接收還是沒有反應,麻煩幫忙了,謝謝
作者: mento    时间: 2020-11-18 12:22
去查設定後暫存器的值,是有吻合以下的規則
* |[15]    |PB4_MFP1  |PB.4 Pin Alternate Function Selection
     * |        |          |The pin function depends on GPB_MFP[4] and PB4_MFP1 (ALT_MFP[15]).
     * |        |          |(PB4_MFP1(ALT_MFP[15]), GPB_MFP[4]) value and function mapping is as following list.
     * |        |          |(0, 0) = GPIO function is selected.
     * |        |          |(0, 1) = UART1_RXD function is selected.
     * |        |          |(1, 0) = SPI2_SS0 function is selected.
     * |        |          |(1, 1) = SPI1_SS1 function is selected.

請問還要檢查哪個部份?
作者: mento    时间: 2020-11-18 14:34
您好~目前確認程式沒有問題,感謝
作者: 匿名    时间: 2020-11-18 14:37
是否时数据传输太少没有达到FIFO触发中断的阈值,看一下RFITL  设置接收FIFO触发中断的阈值设置的多少;可以按下面的设置中断,当接收的数据没有等到fifo阈值时,等到超时也会产生中断
  UART_EnableInt(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_RTO_IEN_Msk));




欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2