打印
[技术问答]

请教N76E003双串口问题

[复制链接]
3016|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lonvx|  楼主 | 2017-6-13 08:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lonvx 于 2017-6-13 08:43 编辑

在使用N76E003串口0和串口1的时候 发现必须关了串口0 的中断,串口1才能正常接收,各位有没有遇到过这种情况?串口初始化代码都是用官方BSP1.01里的代码  UART0用TIM1做波特率定时器  UART1用TIM3做波特率定时器
沙发
598330983| | 2017-6-13 22:00 | 只看该作者
应该不会这样吧,你搜搜看,之前看到有人讨论这个双开

使用特权

评论回复
板凳
huangcunxiake| | 2017-7-15 22:34 | 只看该作者
不是太懂啊,一般都是设置波特率一样。

使用特权

评论回复
地板
zhuotuzi| | 2017-7-17 16:12 | 只看该作者
没玩过,这么多同时搞的。

使用特权

评论回复
5
zhuomuniao110| | 2017-7-17 19:35 | 只看该作者
都是玩一个,等我试试怎么玩两个的串口。

使用特权

评论回复
6
dongnanxibei| | 2017-7-17 20:33 | 只看该作者
看了官方的例子,只有串口0的。

使用特权

评论回复
7
heisexingqisi| | 2017-7-17 21:30 | 只看该作者
难道他们公用了什么

使用特权

评论回复
8
不觉不明| | 2018-1-16 04:10 | 只看该作者
遇到了同样的问题 楼主问题解决了吗

使用特权

评论回复
9
云龙起舞| | 2018-5-9 15:40 | 只看该作者
楼主解决了N76E003双串口的问题了吗?我用N76E885双串口,在keil中进debug都到不了run to main, 关掉任意一个串口就可以debug run to main

使用特权

评论回复
10
云龙起舞| | 2018-5-9 15:40 | 只看该作者
楼主解决了N76E003双串口的问题了吗?我用N76E885双串口,在keil中进debug都到不了run to main, 关掉任意一个串口就可以debug run to main

使用特权

评论回复
11
yiyigirl2014| | 2018-5-15 11:54 | 只看该作者
InitialUART0_Timer1(UINT32 u32Baudrate)

InitialUART1_Timer3(UINT32 u32Baudrate)

用的这两个官方的库函数初始化的模电

使用特权

评论回复
12
yiyigirl2014| | 2018-5-15 11:54 | 只看该作者
用上面的官方的库函数初始化的还是自己配置的寄存器?
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"

//----------------------------------------------------------------------------------
// UART0 baud rate initial setting
//----------------------------------------------------------------------------------
void InitialUART0_Timer1(UINT32 u32Baudrate)    //T1M = 1, SMOD = 1
{
                P06_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
                P07_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
       
    SCON = 0x50;             //UART0 Mode1,REN=1,TI=1
    TMOD |= 0x20;            //Timer1 Mode1
   
    set_SMOD;                //UART0 Double Rate Enable
    set_T1M;
    clr_BRCK;                //Serial port 0 baud rate clock source = Timer1

#ifdef FOSC_160000
    TH1 = 256 - (1000000/u32Baudrate+1);               /*16 MHz */
#endif           
#ifdef FOSC_166000
    TH1 = 256 - (1037500/u32Baudrate);                              /*16.6 MHz */
#endif
    set_TR1;
                set_TI;                                                //For printf function must setting TI = 1
}
//---------------------------------------------------------------
void InitialUART0_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
{
                P06_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
                P07_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit       
       
    SCON = 0x50;     //UART0 Mode1,REN=1,TI=1
    set_SMOD;        //UART0 Double Rate Enable
    T3CON &= 0xF8;   //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
    set_BRCK;        //UART0 baud rate clock source = Timer3

#ifdef FOSC_160000
                RH3    = HIBYTE(65536 - (1000000/u32Baudrate)-1);                  /*16 MHz */
                RL3    = LOBYTE(65536 - (1000000/u32Baudrate)-1);                        /*16 MHz */
#endif
#ifdef FOSC_166000
    RH3    = HIBYTE(65536 - (1037500/u32Baudrate));                         /*16.6 MHz */
    RL3    = LOBYTE(65536 - (1037500/u32Baudrate));                         /*16.6 MHz */
#endif
    set_TR3;         //Trigger Timer3
                set_TI;                                         //For printf function must setting TI = 1
}

UINT8 Receive_Data_From_UART0(void)
{
    UINT8 c;
    while (!RI);
    c = SBUF;
    RI = 0;
    return (c);
}

void Send_Data_To_UART0 (UINT8 c)
{
    TI = 0;
    SBUF = c;
    while(TI==0);
}


//----------------------------------------------------------------------------------
// UART1 baud rate initial setting
//----------------------------------------------------------------------------------
void InitialUART1_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
{
                P02_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
                P16_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
       
          SCON_1 = 0x50;           //UART1 Mode1,REN_1=1,TI_1=1
    T3CON = 0x08;           //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
                clr_BRCK;
       
#ifdef FOSC_160000
                RH3    = HIBYTE(65536 - (1000000/u32Baudrate)-1);                  /*16 MHz */
                RL3    = LOBYTE(65536 - (1000000/u32Baudrate)-1);                        /*16 MHz */
#endif
#ifdef FOSC_166000
                RH3    = HIBYTE(65536 - (1037500/u32Baudrate));                          /*16.6 MHz */
                RL3    = LOBYTE(65536 - (1037500/u32Baudrate));                                /*16.6 MHz */
#endif
    set_TR3;         //Trigger Timer3
}

UINT8 Receive_Data_From_UART1(void)
{
    UINT8 c;
   
    while (!RI_1);
    c = SBUF_1;
    RI_1 = 0;
    return (c);
}

void Send_Data_To_UART1 (UINT8 c)
{
    TI_1 = 0;
    SBUF_1 = c;
    while(TI_1==0);
}


/*==========================================================================*/
#ifdef SW_Reset
void SW_Reset(void)
{
    TA = 0xAA;
    TA = 0x55;
    set_SWRST;
}
#endif
/*==========================================================================*/

使用特权

评论回复
13
云龙起舞| | 2018-5-24 14:50 | 只看该作者
我试过了,N76E885可以开双串口中断正确通讯。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝