[技术问答] 请教N76E003双串口问题

[复制链接]
875|12
 楼主 | 2017-6-13 08:38 | 显示全部楼层 |阅读模式
本帖最后由 lonvx 于 2017-6-13 08:43 编辑

在使用N76E003串口0和串口1的时候 发现必须关了串口0 的中断,串口1才能正常接收,各位有没有遇到过这种情况?串口初始化代码都是用官方BSP1.01里的代码  UART0用TIM1做波特率定时器  UART1用TIM3做波特率定时器
| 2017-6-13 22:00 | 显示全部楼层
应该不会这样吧,你搜搜看,之前看到有人讨论这个双开
| 2017-7-15 22:34 | 显示全部楼层
不是太懂啊,一般都是设置波特率一样。
| 2017-7-17 16:12 | 显示全部楼层
没玩过,这么多同时搞的。
| 2017-7-17 19:35 | 显示全部楼层
都是玩一个,等我试试怎么玩两个的串口。
| 2017-7-17 20:33 | 显示全部楼层
看了官方的例子,只有串口0的。
| 2017-7-17 21:30 | 显示全部楼层
难道他们公用了什么
| 2018-1-16 04:10 | 显示全部楼层
遇到了同样的问题 楼主问题解决了吗
| 2018-5-9 15:40 | 显示全部楼层
楼主解决了N76E003双串口的问题了吗?我用N76E885双串口,在keil中进debug都到不了run to main, 关掉任意一个串口就可以debug run to main
| 2018-5-9 15:40 | 显示全部楼层
楼主解决了N76E003双串口的问题了吗?我用N76E885双串口,在keil中进debug都到不了run to main, 关掉任意一个串口就可以debug run to main
| 2018-5-15 11:54 | 显示全部楼层
InitialUART0_Timer1(UINT32 u32Baudrate)

InitialUART1_Timer3(UINT32 u32Baudrate)

用的这两个官方的库函数初始化的模电
| 2018-5-15 11:54 | 显示全部楼层
用上面的官方的库函数初始化的还是自己配置的寄存器?
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2016 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. #include "N76E003.h"
  13. #include "Common.h"
  14. #include "Delay.h"
  15. #include "SFR_Macro.h"
  16. #include "Function_define.h"

  17. //----------------------------------------------------------------------------------
  18. // UART0 baud rate initial setting
  19. //----------------------------------------------------------------------------------
  20. void InitialUART0_Timer1(UINT32 u32Baudrate)    //T1M = 1, SMOD = 1
  21. {
  22.                 P06_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
  23.                 P07_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
  24.        
  25.     SCON = 0x50;             //UART0 Mode1,REN=1,TI=1
  26.     TMOD |= 0x20;            //Timer1 Mode1
  27.    
  28.     set_SMOD;                //UART0 Double Rate Enable
  29.     set_T1M;
  30.     clr_BRCK;                //Serial port 0 baud rate clock source = Timer1

  31. #ifdef FOSC_160000
  32.     TH1 = 256 - (1000000/u32Baudrate+1);               /*16 MHz */
  33. #endif           
  34. #ifdef FOSC_166000
  35.     TH1 = 256 - (1037500/u32Baudrate);                              /*16.6 MHz */
  36. #endif
  37.     set_TR1;
  38.                 set_TI;                                                //For printf function must setting TI = 1
  39. }
  40. //---------------------------------------------------------------
  41. void InitialUART0_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
  42. {
  43.                 P06_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
  44.                 P07_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit       
  45.        
  46.     SCON = 0x50;     //UART0 Mode1,REN=1,TI=1
  47.     set_SMOD;        //UART0 Double Rate Enable
  48.     T3CON &= 0xF8;   //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
  49.     set_BRCK;        //UART0 baud rate clock source = Timer3

  50. #ifdef FOSC_160000
  51.                 RH3    = HIBYTE(65536 - (1000000/u32Baudrate)-1);                  /*16 MHz */
  52.                 RL3    = LOBYTE(65536 - (1000000/u32Baudrate)-1);                        /*16 MHz */
  53. #endif
  54. #ifdef FOSC_166000
  55.     RH3    = HIBYTE(65536 - (1037500/u32Baudrate));                         /*16.6 MHz */
  56.     RL3    = LOBYTE(65536 - (1037500/u32Baudrate));                         /*16.6 MHz */
  57. #endif
  58.     set_TR3;         //Trigger Timer3
  59.                 set_TI;                                         //For printf function must setting TI = 1
  60. }

  61. UINT8 Receive_Data_From_UART0(void)
  62. {
  63.     UINT8 c;
  64.     while (!RI);
  65.     c = SBUF;
  66.     RI = 0;
  67.     return (c);
  68. }

  69. void Send_Data_To_UART0 (UINT8 c)
  70. {
  71.     TI = 0;
  72.     SBUF = c;
  73.     while(TI==0);
  74. }


  75. //----------------------------------------------------------------------------------
  76. // UART1 baud rate initial setting
  77. //----------------------------------------------------------------------------------
  78. void InitialUART1_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
  79. {
  80.                 P02_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
  81.                 P16_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
  82.        
  83.           SCON_1 = 0x50;           //UART1 Mode1,REN_1=1,TI_1=1
  84.     T3CON = 0x08;           //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
  85.                 clr_BRCK;
  86.        
  87. #ifdef FOSC_160000
  88.                 RH3    = HIBYTE(65536 - (1000000/u32Baudrate)-1);                  /*16 MHz */
  89.                 RL3    = LOBYTE(65536 - (1000000/u32Baudrate)-1);                        /*16 MHz */
  90. #endif
  91. #ifdef FOSC_166000
  92.                 RH3    = HIBYTE(65536 - (1037500/u32Baudrate));                          /*16.6 MHz */
  93.                 RL3    = LOBYTE(65536 - (1037500/u32Baudrate));                                /*16.6 MHz */
  94. #endif
  95.     set_TR3;         //Trigger Timer3
  96. }

  97. UINT8 Receive_Data_From_UART1(void)
  98. {
  99.     UINT8 c;
  100.    
  101.     while (!RI_1);
  102.     c = SBUF_1;
  103.     RI_1 = 0;
  104.     return (c);
  105. }

  106. void Send_Data_To_UART1 (UINT8 c)
  107. {
  108.     TI_1 = 0;
  109.     SBUF_1 = c;
  110.     while(TI_1==0);
  111. }


  112. /*==========================================================================*/
  113. #ifdef SW_Reset
  114. void SW_Reset(void)
  115. {
  116.     TA = 0xAA;
  117.     TA = 0x55;
  118.     set_SWRST;
  119. }
  120. #endif
  121. /*==========================================================================*/
复制代码
| 2018-5-24 14:50 | 显示全部楼层
我试过了,N76E885可以开双串口中断正确通讯。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

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

论坛热帖

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