新唐N76E003+GPRS 串口乱码故障排除手记

发布者:幸福的人生最新更新时间:2022-08-10 来源: csdn关键字:新唐  N76E003  GPRS  串口 手机看文章 扫描二维码
随时随地手机看文章

设计目的

单片机采用N76E003,GPRS模块采用AIR208,N76E003使用USART0与AIR208通信,使用USART1与另一个设备通信。由于每个设备在服务的唯一性,每个设备编号都应该是唯一的。而GPRS模块的IMEI号正好是唯一的,所以设计思路是读取该IMEI号码并以此作为设备的唯一编号。


读取IMEI号码出现乱码故障

N76E003发送控制指令,读取AIR208的IMEI号码。遂尝试着定位问题。


1、使用串口助手观察,N76E003确实发送了控制命令,且AIR208确实返回了包含MEI号码的返回数据。问题是,单片机无论是单步运行还是全速运行,读取的数据均有丢失。


2、使用串口助手对GPRS模块发送控制命令,成功接收返回数据,无丢失。


3、使用串口助手对单片机发送24字节数据,单片机成功接收数据,无丢失。


可以得出结论:单片机串口可以发送,可以接收。GPRS模块串口可以发送,可以接收。


尝试解决方法

怀疑1、单片机参数配置错误

N76E003单片机初始化函数如下,绑定TIM3,尝试绑定TIM1后,问题并未解决。


同时怀疑启用了其他单片机外设造成冲突,所以禁用/注释了除UART0以外的所有其他外设,问题并未解决。


void timer0_init(void)

{

  TMOD = 0XFF;

  TIMER0_MODE1_ENABLE;

  clr_T0M;

  TH0 = (uint8_t)((65535 - 13334) >> 8); //10mS锟斤拷时锟斤拷始值

  TL0 = (uint8_t)((65535 - 13334) & 0xff);

  set_ET0; //enable Timer0 interrupt

  set_TR0; //Timer0 run

}


怀疑2、GPRS与N76E003接口电平兼容问题


1、VBAT电平是4.0V>0.7VCC=3.5V,单片机可以成功识别到高电平


2、将VBAT处电压跳线至VCC=5V,问题未排除


3、将GPRS模块发送引脚直连单片机的接收引脚,问题未排除,遂恢复原有连接


4、怀疑三极管损坏,更换Q1 Q2,问题未排除


怀疑3、电磁兼容 射频干扰问题

1、恢复最初程序,使用示波器,观测单片机TX0 RX0引脚。结果发现,单片机发送引脚TX0存在大量杂波,由于GPRS模块是DTU透传模块,服务器端收到大量乱码。


2、屏蔽单片机发送的询问GPRS模块IMEI号码的指令,乱码消除。


3、服务器通过GPRS模块发送心跳命令给单片机,此时单片机可以正常返回数据。通信过程正常,虽然通过示波器观察TX0 RX0出现了一些杂波,但是不影响整体通信效果。


暂时处置方法

通过串口发送命令设定设备编号


以上尝试都失败,并未解决乱码的问题;仅有的收获是:单片机不能发送读取GPRS模块IMEI号码的指令,否则就会出错。所以暂时的解决办法是用电脑串口助手一个一个给设备发送控制命令,设置设备的唯一序列号。


最终解决方法

修改串口发送函数

念念不忘,必有回响。问题得不到解决,笔者反复思考问题到底出在哪里。最后灵光一闪,单片机发送读IMEI号码的指令就乱码了,那是否问题就出在发送函数呢?问题正在这里。


原有的串口发送函数

void usart0_send_buf(char *buf, char len)

{

  u8 i = 0;

  for (i = 0; i < len; i++)

  {

    usart0_send_byte(buf[i]);

  }

}

更改后的串口发送函数


void usart0_send_buf(char *buf, char len)

{

  while (*buf != '')

  {

    usart0_send_byte(*buf);

    buf++;

  }

}

总结:数组的初始化及其元素个数


1、表面上看,是USART0的发送函数不规范引起的问题。单片机执行跑飞。


2、深层的看,是数组的元素个数问题,如果使用原有的打印函数,只要保证数组边界不溢出,也是可以的。正如下图所示,"rrpc,getimeirn",我们认为是14个字节,但是如果数组长度也定义为14或只发生14个字节,就会出问题。编译器提示,这个数组要准备15个字节的存储空间。

3、今后发送串口数据,尽量采用while (*buf != '')的发送方式,不得已采用逐个发送的方法时,要注意数据的边界,不要溢出。

关键字:新唐  N76E003  GPRS  串口 引用地址:新唐N76E003+GPRS 串口乱码故障排除手记

上一篇:N76E003介绍与开发资料获取
下一篇:新唐N76E003+GPRS 内部EEPROM读取故障排除手记

推荐阅读最新更新时间:2024-11-08 10:20

STM32串口DMA连续发送两帧,导致数据部分覆盖的问题
问题描述 使用STM32的串口进行DMA发送(Noraml模式),在某个任务中连续调用两次发送函数log_printf(),但是发回的数据在串口调试助手上显示与预期不符。第一次发送的数据有一部分被第二次发送的数据覆盖,如图所示: 任务代码如下: /* Log_Task function */ void Log_Task(void const * argument) { /* USER CODE BEGIN Log_Task */ /* Infinite loop */ for(;;) { if(router_rx_flag == 1) { router_rx_flag = 0;
[单片机]
基于GPRS的大棚智能监控系统
近年来,温室大棚种植为提高人们的生活水平带来极大的便利,得到了迅速的推广和应用。种植环境中的温度、湿度、光照度、CO2浓度等环境因子对作物的生产有很大的影响。传统的人工控制方式难以达到科学合理种植的要求,目前国内可以实现上述环境因子自动监控的系统还不多见,而引进国外具有多功能的大型连栋温室控制系统价格昂贵,不适合国情。 针对目前大棚发展的趋势,提出了一种大棚智能监控系统的设计。根据大棚智能监控的特殊性,需要传输大棚现场参数给管理者,并把管理者的命令下发到现场执行设备,同时又要使上级部门可随时通过互连网或者手机信息了解区域大棚的实时状况。基于 GPRS的智能大棚监控系统使这些成为可能。 1 GPRS系统简介 GPRS(Genera
[工业控制]
基于<font color='red'>GPRS</font>的大棚智能监控系统
STM32F103C8T6实现串口IAP方式升级固件
首先下载官方STM32F10X的IAP Bootloader源码,STM32F10x_AN2557_FW_V3.3.0。 源码包地址:http://download.csdn.net/download/yunyin_link/10151170 用Keil4打开工程代码STM32F10x_AN2557_FW_V3.3.0\Project\IAP\MDK-ARM\IAP.uvproj 第一步:因为我们是用的STM32F103C8T6 是64K Flash,所以特别重要的是修改Flash宏,如下图示,改为:STM32F10X_MD。 代码中对不同规格的Flash做了处理。 第二步:限定一下IAP Boot
[单片机]
STM32F103C8T6实现<font color='red'>串口</font>IAP方式升级固件
STM32l151低功耗芯片串口通信(HAL库)
参考原子的stm32f系列的串口通信实验,移植到stm23l系列的程序代码。 1、采用串口中断方式,串口接收到消息产生中断,因此需要使能RXNE寄存器。HAL库函数的调用方式是__HAL_UART_ENABLE_IT(&UartHandle1, UART_IT_RXNE); UartHandle1是UART_HandleTypeDef类型,具体参考stm32lxx_hal_uart.h文件。 2、关于串口初始化,由于HAL库中的串口初始化函数HAL_UART_Init();会调用HAL_UART_MspInit();后者是一个关于串口1和串口2的I/O端口模式选择及初始化的函数。 为了使程序能顺利进入中断,可在Ms
[单片机]
STM8学习笔记---串口通信中如何自己定义通信协议
在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的。好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写。今天就来说一下如何串口通信协议是如何定义出来的。 先看一段最简单的串口程序。 void Uart1_Init( unsigned int baudrate ) { unsigned int baud; baud = 16000000 / baudrate; Uart1_IO_Init(); //IO口初始化 UART1_CR1 = 0; UART1_CR2 = 0; UART1_CR3 = 0; UART1_BRR2 = ( uns
[单片机]
通用异步串口扩展芯片GM8123/25的原理和应用
作者Email: market@gticc.com 摘 要 本文介绍了一种新器件GM8123/25串口扩展芯片,利用该系列芯片实现的串口扩展方案具有成本低、速度快、控制简单等优点,可广泛应用于数据采集、工业控制等需要串口通讯的场合。 关键词 GM8123 GM8125 串口扩展 一.同类方案比较 目前比较通用的串口扩展方案有两种,一是用硬件实现,使用多串口单片机或专用串口扩展芯片,可供选择的串口扩展芯片有TI等公司开发的16C554系列串口扩展芯片,该系列芯片实现的功能是通过并行口扩展串行口,功能比较强大、通讯速度高,但控制复杂,同时价格较高,主要的应用场合是PC机串口扩展产品。在仅使用单片机控制且不需要
[应用]
STM32之串口的使用
串口的使用 1、为什么要用串口? 自上一篇写的时间是1月20号,今6月7号了,半年没更新了。 这半年发生了什么?过完年就去找公司实习,在那里自我感觉进步很大。其实在公司大多都是自学,师傅基本不会给你说什么。但这并不能说明你的师傅对你不好,带我的那个师傅只比我高一届,但他的水平比我高的好多届。他也是自学,也没人告诉他该怎么做,因为老板也不太懂。所以自学能力很重要,当然有人带你的话,这样会更好。 不说这些了,串口在调试的时候作用非常大。也学我们在学51的时候,只是将程序下载到开发板,看看是否能运行起来,通过数码管将结果显示出来,从而就知道程序设计的正确性。以前我也是这样做的,没什么不好。 在公司实习的时候,他们调试都是使用串
[单片机]
STM32之<font color='red'>串口</font>的使用
基于GPRS的嵌入式智能家居终端的设计与实现
  1引言   随着网络技术和通信技术的不断发展,人们希望即使在工作或外出时也能通过某种方式及时了解和控制家中的情况,同时伴随着数字化家庭的普及,实现智能家居的远程控制已经成为一种趋势。家庭智能控制系统通过家庭总线技术,把家庭中各种家用电器、家庭保安装置和各种计量设备连接到一起组成一个家庭内部网络,由家庭智能控制器进行统一管理[1]。远程控制就是通过某种通讯方式将智能家庭控制器与外界相连,使人们能够在本地或异地对家庭系统进行集中的监视、控制。本文中介绍的方案,结合了GPRS(GeneralPacketRadioService)技术永远在线,速度快,接入范围广,体积小,功耗低等优点[2],采用RS485工业总线,设计实现了一种基于
[单片机]
基于<font color='red'>GPRS</font>的嵌入式智能家居终端的设计与实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved