[技术问答] 怎样使用N76E003的UART1?

[复制链接]
902|13
 楼主 | 2018-1-10 10:25 | 显示全部楼层 |阅读模式
现在初用N76E003,感觉非常棒,它的ADC性能挺好的。

现在碰到个难题,UART1不工作,把例程的项目编译后,用示波器也看不到UART1发出的信号。
我的程序基本也是抄例程的:
        InitialUART1_Timer3(9600);
        set_ES_1;                                // For interrupt enable


后来看到手册里有这样一段话:
Note that before serial port function works, the port latch bits of P0.7 and P0.6 (for RXD and TXD pins) or P0.2 and P1.6 (for RXD_1 and TXD_1 pins) have to be set to 1

就把端口提前设置为1
        P0 = P0 | 0x04;                // P02
        P1 = P1 | 0x40;                // P16

UART1还是不工作

调试中发现,Timer3是工作的,UART1也可以进入中断,但进入中断后,只有RI_1=1,没有发现TI_1=1的情况(已经不停地向串口写数据)

现在使用的是KEIL编译器,有些寄存器无法查看,很是着急。


| 2018-1-10 10:41 | 显示全部楼层
没有原厂的技术支持什么的吗
 楼主 | 2018-1-10 10:55 | 显示全部楼层
我这是咋了,一发帖,问题就找到了。

原来,向串口发数据的语句,受一个条件控制,这个条件不成立,所以就没有发。

谢谢各位关注
 楼主 | 2018-1-10 10:55 | 显示全部楼层
bioger2 发表于 2018-1-10 10:41
没有原厂的技术支持什么的吗

和厂里没有联系。
| 2018-1-10 11:01 | 显示全部楼层
这说明楼主脑子灵活,转的快。
| 2018-1-10 15:12 | 显示全部楼层
应该每个寄存器都可以读吧,读出来,printf
| 2018-1-12 21:18 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 UART-0 Mode1 demo code
  14. //***********************************************************************************************************

  15. #include "N76E003.h"
  16. #include "Common.h"
  17. #include "Delay.h"
  18. #include "SFR_Macro.h"
  19. #include "Function_define.h"


  20. #define BUFFER_SIZE                16
  21. UINT8  UART_BUFFER[BUFFER_SIZE],temp;
  22. UINT16 u16CNT=0,u16CNT1=0;
  23. bit riflag;


  24. /******************************************************************************
  25. * FUNCTION_PURPOSE: Serial port 1 interrupt, echo received data.
  26. * FUNCTION_INPUTS : P0.2(RXD) serial input
  27. * FUNCTION_OUTPUTS: P1.6(TXD) serial output
  28. * Following setting in Common.c
  29. ******************************************************************************/
  30. #if 0
  31. //void InitialUART1_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
  32. //{
  33. //                P02_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
  34. //                P16_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
  35. //       
  36. //          SCON_1 = 0x50;           //UART1 Mode1,REN_1=1,TI_1=1
  37. //    T3CON = 0x08;           //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
  38. //                clr_BRCK;
  39. //       
  40. //#ifdef FOSC_160000
  41. //                RH3    = HIBYTE(65536 - (1000000/u32Baudrate)-1);                  /*16 MHz */
  42. //                RL3    = LOBYTE(65536 - (1000000/u32Baudrate)-1);                        /*16 MHz */
  43. //#endif
  44. //#ifdef FOSC_166000
  45. //                RH3    = HIBYTE(65536 - (1037500/u32Baudrate));                          /*16.6 MHz */
  46. //                RL3    = LOBYTE(65536 - (1037500/u32Baudrate));                                /*16.6 MHz */
  47. //#endif
  48. //    set_TR3;         //Trigger Timer3
  49. //}
  50. #endif

  51. void SerialPort1_ISR(void) interrupt 15
  52. {
  53.     if (RI_1==1)
  54.     {                                       /* if reception occur */
  55.         clr_RI_1;                             /* clear reception flag for next reception */
  56.         UART_BUFFER[u16CNT] = SBUF_1;
  57.         u16CNT ++;
  58.                                 riflag =1;
  59.     }
  60.     if(TI_1==1)
  61.     {
  62.         clr_TI_1;                             /* if emission occur */
  63.     }
  64. }


  65. /****************************************************************************************************************
  66. * FUNCTION_PURPOSE: Main function
  67.   
  68. !!! N76E003 UART1 pin also occupied by debug pin,
  69. please remove Nu-link or not in debug mode to test UART1 function.

  70. External UART1 connect also disturb debug download

  71. ***************************************************************************************************************/
  72. void main (void)
  73. {
  74.         P12_PushPull_Mode;                // For I/O toggle display
  75.        
  76. #if 0       
  77. //for Simple use UART1 transmit out
  78.                 InitialUART1_Timer3(115200);               
  79.     while(1)
  80.     Send_Data_To_UART1(0x55);
  81.                
  82. #else                       
  83. // For interrupt setting check receive
  84.                 InitialUART1_Timer3(115200);
  85.                 set_ES_1;                                        //For interrupt enable
  86.                 set_EA;
  87.                
  88.                 while(1)
  89.                 {
  90.                         if (riflag)
  91.                         {
  92.                                         P12 = ~ P12;                        //Receive each byte P12 toggle, never work under debug mode
  93.                                         riflag = 0;
  94.                         }
  95.                 }

  96. #endif
  97.                        
  98.        
  99.                
  100. }
  101.   
复制代码
| 2018-1-12 21:19 | 显示全部楼层
串口1的,例子。
| 2018-1-13 19:17 | 显示全部楼层
我看这个官方提供了关于串口通信的一些库函数。
| 2018-1-14 16:13 | 显示全部楼层
  1. typedef bit                   BIT;
  2. typedef unsigned char         UINT8;
  3. typedef unsigned int          UINT16;
  4. typedef unsigned long         UINT32;

  5. typedef unsigned char         uint8_t;
  6. typedef unsigned int          uint16_t;
  7. typedef unsigned long         uint32_t;




  8. #define     CID_READ                                0x0B
  9. #define     DID_READ                                0x0C

  10. #define     ERASE_APROM                                0x22
  11. #define     READ_APROM                                0x00
  12. #define     PROGRAM_APROM                        0x21
  13. #define     ERASE_LDROM                               
  14. #define     READ_LDROM                               
  15. #define     PROGRAM_LDROM                       
  16. #define     READ_CFG                                        0xC0
  17. #define     PROGRAM_CFG                                0xE1
  18. #define                        READ_UID                                        0x04


  19. void  InitialUART0_Timer1(UINT32 u32Baudrate); //T1M = 1, SMOD = 1
  20. void  InitialUART0_Timer3(UINT32 u32Baudrate); //Timer3 as Baudrate, SMOD=1, Prescale=0
  21. void  InitialUART1_Timer3(UINT32 u32Baudrate);
  22. void  Send_Data_To_UART0(UINT8 c);
  23. UINT8 Receive_Data_From_UART0(void);
  24. void  Send_Data_To_UART1(UINT8 c);
  25. UINT8 Receive_Data_From_UART1(void);
  26. void  InitialUART1(UINT32 u32Baudrate);

  27. extern bit BIT_TMP;
复制代码
| 2018-1-14 16:13 | 显示全部楼层
用这个common.h 里的库函数
| 2018-1-16 08:31 | 显示全部楼层
您好 请教下您我 现在也刚学这个单片机 串口1没反,应用的是例程,请问下您有没遇到!
 楼主 | 2018-1-17 12:01 | 显示全部楼层
huashen 发表于 2018-1-16 08:31
您好 请教下您我 现在也刚学这个单片机 串口1没反,应用的是例程,请问下您有没遇到! ...

看看串口用的定时器工作了没有?
| 2018-1-17 21:05 | 显示全部楼层
看手册根据结构顺序设置就OK
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表