UART的调试

  串口是很久之前做的了,映像最深的就是子函数的调用导致完好的程序罢工。郁闷了一个下午。后来不得不把所有的子函数拆掉,直接堆在了主函数里面,然后立竿见影,几分钟搞定。不少人遇到这个问题,后来曹老师出马,花了一个中午终于找出问题了。

  问题在于在Makefile文件中,在生成目标文件的时候,把汇编代码的.O 文件 放在了C部分的.O文件之前,结果导致了链接时出现了错误。解决办法有两个:

  1、最简单的当然就是把两个文件位置对调      led.bin: serial.o   serials.o

  2、第一种方法显然治标不治本,比较专业的做法是写一个连接器脚本,连接器脚本代码如下:

  SECTIONS

{
        . = 0x20000000;
 .text : {
        serials.o  //把 汇编代码的.o 文件先链接
        * (.text)
     }

.bss : {
        * (.bss)
     }

.data : {
        * (.data)
    }
}

/*************************************************************************************************************************************/

/*设置LED灯*/
#define GPJ2CON (*(volatile unsigned int*)0xE0200280)
#define GPJ2PUD (*(volatile unsigned int*)0xE0200288)
#define GPJ2DAT (*(volatile unsigned int*)0xE0200284)

/*配置COM3口*/
#define GPA1CON (*(volatile unsigned int*)0xE0200020)

/*配置ULCON3和UCON3*/
#define ULCON3 (*(volatile unsigned int*)0xE2900C00)
#define UCON3 (*(volatile unsigned int*)0xE2900C04)

/*用来使能FIFO*/
#define UFCON3 (*(volatile unsigned int*)0xE2900C08)

/*设置波特率*/
#define UBRDIV3 (*(volatile unsigned int*)0xE2900C28)
#define UDIVSLOT3 (*(volatile unsigned int*)0xE2900C2C)

//设置状态寄存器
#define UTRSTAT3 (*(volatile unsigned int*)0xE2900C10)

//设置发送接收寄存器
#define UTXH3 (*(volatile unsigned int*)0xE2900C20)
#define URXH3 (*(volatile unsigned int*)0xE2900C24)

首先是串口的初始化,使用的UART0

void init_serial(void)
{
      //设置GPIO为串口模式
      GPA1CON &= 0x00ff;
      GPA1CON |= 0x2200;

//设置数据格式和相关配置
     ULCON3 = 0x3;
     UCON3 = 0x5;
     UFCON3 = 0x1;

//设置波特率
     UBRDIV3 = 35;
     UDIVSLOT3 = 0x1;
}

void main(void)
{
//设置LED灯为上拉熄灭模式
GPJ2CON &=0xFFFF0000;
GPJ2CON |=0x1111;

GPJ2PUD &=0xFFFFFF00;
GPJ2PUD |=0xAA;

GPJ2DAT=0xf;
init_serial();

//GPJ2DAT=0x0;
/*
//设置GPIO为串口模式
GPA1CON &= 0x00ff;
GPA1CON |= 0x2200;

//设置数据格式和相关配置
ULCON3 = 0x3;
UCON3 = 0x5;
UFCON3 = 0x1;

//设置波特率
UBRDIV3 = 35;
UDIVSLOT3 = 0x1;
*/
//init_serial();
//delay(void);

char temp ;

while(1)
{
//put_c(temp);

while( (UTRSTAT3 & 0x1)==0 );

temp = URXH3;

UTXH3 = temp;

if(temp == ‘1‘)
{
      GPJ2DAT = GPJ2DAT ^1;
}

if(temp == ‘2‘)
{
      GPJ2DAT = GPJ2DAT ^2;
}

if(temp == ‘3‘)
{
      GPJ2DAT = GPJ2DAT ^4;
}

if(temp == ‘4‘)
{
     GPJ2DAT = GPJ2DAT ^8;
}
}
}

时间: 2024-11-07 21:23:20

UART的调试的相关文章

Linux下使用putty进行UART串口调试【转】

本文转载自:http://blog.csdn.net/xzongyuan/article/details/11593101 版权声明:本文为博主原创文章,未经博主允许不得转载. 使用putty进行串口调试,非常简单.只需要设置好端口(Serial Line),Linux中默认接上串口后,端口为ttyS0,或者ttyUSB0(对应USB转串口),如果再多接一个,就会显示ttyS1或者ttyUSB1:Window中,普通串口对应的是COM1.COM2,USB对应COM3(需要安装驱动,在设备管理器查

UART和RS232/RS485的关系是什么?

串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232则是其中最简单最常用的通讯方式.但是初学者往往搞不清有关的名词如UART和RS232或RS485之间是什么关系,因为它们经常被放到语句中同等的位置使用.在百度搜索二者的区别,可以看到排在最前面的答案充斥着混淆的概念.就此,谈谈我对这几个概念的理解,希望能帮初学者厘清它们之间的关系. 通讯问题,和交通是一样的.串口通信,我们这里可以用公交来类比. 公交运行可以简单分成两个部分: 1.车站 2.公路 其中车站决定了车上装什么(人),怎

【转】BLE_CC2540_初学者入门指导

原文网址:http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/61462.aspx 看了下问题,发现不太会回答了,很久没弄,全忘记了,只好贴出之前的一些东西,帮助初学者入下门吧: 一.初识BLE 通过这两天对<CC2540 BLE Software Developer Guider V1.2.pdf >的学习对CC2540以及蓝牙4.0有了一个整体上的认识: 1.蓝牙4.0协议:B

通过波形分析方法调试UART数据收发

摘  要:本文通过对异步串行数据格式的分析,阐述通过波形分析方法调试UART数据收发的原理和方法. 经常遇到初学者,对单片机串行通讯出了问题不知道如何办的情况.其实最有效的调试方法是用示波器观察收发数据的波形.通过观察波形可以确定以下情况: 是否有数据接收或发送: 数据是否正确: 波特率是否正确: 一.串行数据的格式 异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5.6.7.8位,停止位可以是1.1.5.2位. 起始位是一个值为0的位,所以对于正逻辑的TTL电平

stm32f4 dma + uart idle + double 调试小记

使用 stm32f4 调试uart 接收, 使用 空闲中断,dma 双缓冲模式,有以下几点需要注意的. 调试的时候断点不要打在 if (USART_GetITStatus(USART6, USART_IT_IDLE) != RESET) 这种语句上面,要打在 if 的代码块里面.mdk 调试的时候,会出现一些 bug,当在 if (USART_GetITStatus(USART6, USART_IT_IDLE) != RESET) 断点的时候,能够看到 idle 信号出现,但是只要向下执行,不管

Cypress的开发板的UART接口打印调试信息

说实话,在官方论坛现在还没有找到相关有用的消息,因为我们这个开发板的UART没引出来. http://www.cypress.com/?app=forum&id=167&rID=52778 http://www.cypress.com/?app=forum&id=167&rID=64016 http://www.cypress.com/?app=forum&id=167&rID=64701 http://www.cypress.com/?app=forum&

Linux学习 : 裸板调试 之 配置UART

1.UART原理说明 发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出:接收数据时,UART检测另一根电线上的信号,串行收集然后放在缓冲区中,CPU即可读取UART获得这些数据.UART之间以全双工方式传输数据,最精确的连线方法只有3根电线:TxD用于发送数据,RxD用于接收数据,Gnd用于给双发提供参考电平,连线如下: UART使用标准的TTL/CMOS逻辑电平(0~5v.0~3.3v.0~2.5v或0~1.8v)来表示数据,高电平表示1,低电平表示0.为了

UART接口算法移植加密芯片的调试技巧——算法调试

算法移植加密芯片的调试包含2个部分:通讯调试和算法调试.之前讲到过通讯调试技巧,接下来本篇将对算法调试中的问题进行分析总结,来帮助客户顺利地完成调试.算法调试中的常见问题:1.不要自行建工程客户在移植算法时,无需新建工程,直接打开已有例程进行编程即可.2.切记不能在线调加密芯片属于安全芯片,不支持在线调试,只能下载算法后,通过算法指令验证功能是否正常.3.了解架构是前提 加密芯片分为驱动层和应用层两部分,用户MCU发来的指令会先在驱动层解析,所以用户要学会定位驱动层问题.芯片返回的6D00.6E

嵌入式系统编程和调试技巧

嵌入式系统的开发,软件的运行稳定可靠是非常重要的.在芯片中,软件是没有质量的,但软件的质量可以决定一颗芯片的成败.芯片设计中,性能能否满足设计要求,除了硬件设计.软硬件配合的设计技巧,对于软件来说,编程的一些技术和技巧同样重要. 本文讲述我在芯片固件开发过程中使用的一些编程调试技巧.针对在嵌入式系统开发中常见的问题,如实时系统下的同步问题,动态内存分配的内存泄漏问题,如何在编程阶段预防BUG出现,调试阶段如何及时发现问题和定位问题.总结下经验,目的是开发一个稳定运行的固件,提高开发效率,提高运行