找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

[NUC] NUC123SD4A UART1發送資料錯誤

[复制链接]
匿名  发表于 2020-11-12 09:57:04 |阅读模式
您好,我依照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:32 | 显示全部楼层
请问你是怎么测试的.你的代码我这边测试了没问题
牛卧堂
回复 支持 1 反对 0

使用道具 举报

mento 发表于 2020-11-13 14:12:29 | 显示全部楼层
admin 发表于 2020-11-12 14:50
请问你是怎么测试的.你的代码我这边测试了没问题

謝謝您~確認代碼無誤,我再好好的檢查硬體,看有什麼問題!
回复 支持 反对

使用道具 举报

mento 发表于 2020-11-17 17:45:07 | 显示全部楼层
您好,依前述程式碼已可正常發送,但接收時中斷向量沒有反應,已確認硬體沒有問題
若是改成
UART_EnableInt(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk));
增加了Tx empty interrupt是有進入中斷向量的,所以確認中斷是有啟動的,
但唯獨對於接收還是沒有反應,麻煩幫忙了,謝謝
回复 支持 反对

使用道具 举报

mento 发表于 2020-11-18 12:22:16 | 显示全部楼层
去查設定後暫存器的值,是有吻合以下的規則
* |[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:54 | 显示全部楼层
您好~目前確認程式沒有問題,感謝
回复 支持 反对

使用道具 举报

匿名  发表于 2020-11-18 14:37:35
是否时数据传输太少没有达到FIFO触发中断的阈值,看一下RFITL  设置接收FIFO触发中断的阈值设置的多少;可以按下面的设置中断,当接收的数据没有等到fifo阈值时,等到超时也会产生中断
  UART_EnableInt(UART1, (UART_IER_RDA_IEN_Msk | UART_IER_RTO_IEN_Msk));
回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU