打印
[技术问答]

怎样使用N76E003的UART1?

[复制链接]
4688|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dontium|  楼主 | 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编译器,有些寄存器无法查看,很是着急。


沙发
bioger2| | 2018-1-10 10:41 | 只看该作者
没有原厂的技术支持什么的吗

使用特权

评论回复
板凳
dontium|  楼主 | 2018-1-10 10:55 | 只看该作者
我这是咋了,一发帖,问题就找到了。

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

谢谢各位关注

使用特权

评论回复
地板
dontium|  楼主 | 2018-1-10 10:55 | 只看该作者
bioger2 发表于 2018-1-10 10:41
没有原厂的技术支持什么的吗

和厂里没有联系。

使用特权

评论回复
5
小明的同学| | 2018-1-10 11:01 | 只看该作者
这说明楼主脑子灵活,转的快。

使用特权

评论回复
6
xuanhuanzi| | 2018-1-10 15:12 | 只看该作者
应该每个寄存器都可以读吧,读出来,printf

使用特权

评论回复
7
antusheng| | 2018-1-12 21:18 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

//***********************************************************************************************************
//  File Function: N76E003 UART-0 Mode1 demo code
//***********************************************************************************************************

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


#define BUFFER_SIZE                16
UINT8  UART_BUFFER[BUFFER_SIZE],temp;
UINT16 u16CNT=0,u16CNT1=0;
bit riflag;


/******************************************************************************
* FUNCTION_PURPOSE: Serial port 1 interrupt, echo received data.
* FUNCTION_INPUTS : P0.2(RXD) serial input
* FUNCTION_OUTPUTS: P1.6(TXD) serial output
* Following setting in Common.c
******************************************************************************/
#if 0
//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
//}
#endif

void SerialPort1_ISR(void) interrupt 15
{
    if (RI_1==1)
    {                                       /* if reception occur */
        clr_RI_1;                             /* clear reception flag for next reception */
        UART_BUFFER[u16CNT] = SBUF_1;
        u16CNT ++;
                                riflag =1;
    }
    if(TI_1==1)
    {
        clr_TI_1;                             /* if emission occur */
    }
}


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

External UART1 connect also disturb debug download

***************************************************************************************************************/
void main (void)
{
        P12_PushPull_Mode;                // For I/O toggle display
       
#if 0       
//for Simple use UART1 transmit out
                InitialUART1_Timer3(115200);               
    while(1)
    Send_Data_To_UART1(0x55);
               
#else                       
// For interrupt setting check receive
                InitialUART1_Timer3(115200);
                set_ES_1;                                        //For interrupt enable
                set_EA;
               
                while(1)
                {
                        if (riflag)
                        {
                                        P12 = ~ P12;                        //Receive each byte P12 toggle, never work under debug mode
                                        riflag = 0;
                        }
                }

#endif
                       
       
               
}
  

使用特权

评论回复
8
antusheng| | 2018-1-12 21:19 | 只看该作者
串口1的,例子。

使用特权

评论回复
9
玛尼玛尼哄| | 2018-1-13 19:17 | 只看该作者
我看这个官方提供了关于串口通信的一些库函数。

使用特权

评论回复
10
xixi2017| | 2018-1-14 16:13 | 只看该作者
typedef bit                   BIT;
typedef unsigned char         UINT8;
typedef unsigned int          UINT16;
typedef unsigned long         UINT32;

typedef unsigned char         uint8_t;
typedef unsigned int          uint16_t;
typedef unsigned long         uint32_t;




#define     CID_READ                                0x0B
#define     DID_READ                                0x0C

#define     ERASE_APROM                                0x22
#define     READ_APROM                                0x00
#define     PROGRAM_APROM                        0x21
#define     ERASE_LDROM                               
#define     READ_LDROM                               
#define     PROGRAM_LDROM                       
#define     READ_CFG                                        0xC0
#define     PROGRAM_CFG                                0xE1
#define                        READ_UID                                        0x04


void  InitialUART0_Timer1(UINT32 u32Baudrate); //T1M = 1, SMOD = 1
void  InitialUART0_Timer3(UINT32 u32Baudrate); //Timer3 as Baudrate, SMOD=1, Prescale=0
void  InitialUART1_Timer3(UINT32 u32Baudrate);
void  Send_Data_To_UART0(UINT8 c);
UINT8 Receive_Data_From_UART0(void);
void  Send_Data_To_UART1(UINT8 c);
UINT8 Receive_Data_From_UART1(void);
void  InitialUART1(UINT32 u32Baudrate);

extern bit BIT_TMP;

使用特权

评论回复
11
xixi2017| | 2018-1-14 16:13 | 只看该作者
用这个common.h 里的库函数

使用特权

评论回复
12
huashen| | 2018-1-16 08:31 | 只看该作者
您好 请教下您我 现在也刚学这个单片机 串口1没反,应用的是例程,请问下您有没遇到!

使用特权

评论回复
13
dontium|  楼主 | 2018-1-17 12:01 | 只看该作者
huashen 发表于 2018-1-16 08:31
您好 请教下您我 现在也刚学这个单片机 串口1没反,应用的是例程,请问下您有没遇到! ...

看看串口用的定时器工作了没有?

使用特权

评论回复
14
捉虫天师| | 2018-1-17 21:05 | 只看该作者
看手册根据结构顺序设置就OK

使用特权

评论回复
15
小糖人| | 2018-7-22 20:50 | 只看该作者
dontium 发表于 2018-1-10 10:55
我这是咋了,一发帖,问题就找到了。

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

请问是什么条件。

使用特权

评论回复
16
近道| | 2019-1-3 11:37 | 只看该作者
问题原因找到了跟官方例程没关系。uart1和下载口ice_data和ice_clk复用了,断开ice_data和ice_clk即可。我之前用其它家工业级单片机做汽车电子产品方案,现在试用和替换成N76E003,21ic是很好平台,和大家一起快速学习。

使用特权

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

本版积分规则

个人签名:官向官来民向民,穷人向的是穷人

151

主题

1173

帖子

10

粉丝