项目中遇到的问题(一)

暑假有个小课题要做,今天是接手的第二天。这两天在做的时候遇到了一些问题,在这里就把这些记录下来,作为自己的特殊的财富。若是可以给遇到同样问题的人,一些帮助,那我会非常高兴。

以下就是自己一开始出错的地方,有些问题很简单,但不注意或者以前没有接触过就容易死磕在那。

(1)在使用STM32串口通信的时候,有个奇怪的现象:发送的第一个字节会丢失。我的代码一开始是这样的:

void uart1_send(u8 *pbuffer)
{
  while((*pbuffer))
  {   
 USART1->DR = *pbuffer++;
 while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == 0);//等待发送完毕,若发送完成则硬件置1
  }
}

仔细看手册的时候发现 TC 和 TXE 标志位在复位的时候被置1 ,这样第一次while循环就是没有用的。这样导致了首次第一个字符还没有被输出,就被后面的字符覆盖掉,造成实际看到的丢失现象。解决方法如下:

void uart1_send(u8 *pbuffer)
{
  USART_GetFlagStatus(USART1, USART_FLAG_TC);
  /* CPU的小缺陷:串口配置好,如果直接Send,则第1个字节发送不出去
     上面这条语句解决第1个字节无法正确发送出去的问题 */
  while((*pbuffer))
  {   
 USART1->DR = *pbuffer++;
 while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == 0);//等待发送完毕,若发送完成则硬件置1
  }
}

(2)课题项目中用到了一个激光测距传感器,它输出的格式是RS232。当时我不知道怎么回事,就直接把传感器的TX和RX引脚直接接到stm32的RX和TX。结果可想而知,调试很久,就是有问题。突然缓过神来,单片机输出的电平是TTL电平,他们电平不匹配。后来加了个MAX232,一切OK。

(3)说到这个MAX232,还吓出了一身冷汗。因为MAX232是5V器件,我把它直接连在了STM32的串口引脚了,瞎猫碰上死耗子,那两个引脚是5V容忍的。下次果断使用MAX3232。

(4)还是说说那个激光传感器,使用串口给那个传感器发送指令后,传感器会从串口返回数据。而我开启了串口接收中断,但要命的是我没写串口接收中断处理函数。然后发现程序死掉了。我的测试程序是写了条发送指令,然后在这条发送指令下面是点亮一个灯,发现灯一直不亮。因为接收到了数据,程序要跑到接收中断函数处,它找不到这个入口点,死掉了,所以执行不到点灯的那条指令。

(5)程序中一段ASC码转10进制的代码:

void a2i(void)
{
 u8 i,k;
 u16 temp=0;
 for(k=1;k<row-2;k++)//激光传感器连续测量时第一组数据是错误的。
 {                              //所以从k=1开始
  for(i=0;i<4;i++)
  {
   if(userdata.recbuf[k][i]!=0)
   {
    temp=(temp<<3)+(temp<<1);  //乘以10
    temp+=userdata.recbuf[k][i]&0x0F;
   }     
  }
  userdata.recnum[k]=temp;
  temp=0;
 }
}

这段程序的前提是我的那个传感器输出数据的格式是这样的比如508 mm。而5、0、8这几个数据都是以十六进制的ASC码发送回来的。巧的是比如:整形变量4的ASC码是34。正好是后面那个4。所以有程序中的这句:userdata.recbuf[k][i]&0x0F;

(6)typedef union
{
 unsigned char recbuf[60][4];

int recnum[60];

}
USERDATA;
USERDATA xdata userdata;

这个用到了联合体,以前写程序的时候自己没怎么用,这里正好学习一下。

联合体的空间要大到足够容纳最"宽"的成员;所有成员引用的是内存中的相同位置。当你想在不同的时刻把不同的东西存储在同一个位置时,就可以使用联合。

上面这个代码可以减少数组声明占用的内存,不然int recnum[60]; 又要占用另外的内存了。

以上就是这两天的所学所得,有些东西可能在大神面前不值一提,有些东西可能说的不怎么对。若有不对的地方,请各位大神指点。

项目中遇到的问题(一),布布扣,bubuko.com

时间: 2024-11-06 10:25:09

项目中遇到的问题(一)的相关文章

用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中

我最近在用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中,第一次写项目,写过这类项目的多多提意见,哪方面的意见都行,有代码或者demo的求赏给我,谢谢

DotNet项目中的一些常用验证操作

在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可对系统进行js注入. 如果在后台对用户输入的信息进行验证会相对的安全,在出现信息验证不合法时,可以直接在程序中抛出异常,终止程序的运行. 现在提供几种较为常用的验证方法,可以减少在项目中开发时间和错误性: 1.判断域名:         /// <summary>         /// 普通的域名         /// </summ

javaWeb项目中如何实现在线查看pdf文件

最近有需求要实现在网页直接查看pdf,word,excel文件.但是实际当中并没有很好的开源插件供我们使用,确实有一些付费的插件不错,也很好用,但是对于我来说都不适合. 现在只是单纯的找到了围魏救赵的方法. 就是先实现显示pdf文件,其他文件用别的方式去转成pdf.虽然这个方法确实不好,但是也是没有办法的办法了,如果以后能有更好的,那就再发布别的吧. 这里我就直接介绍pdf的显示方法. 直接上干货. 首先在E:\tomcat8\webapps这个目录下面拷贝下面这个文件 http://yunpa

Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)

在自动化测试项目中,可能会碰到一些经常使用的但 很少变化的配置信息,下面就来介绍使用configparser来读取配置信息config.ini 读取的信息(config.ini)如下: [config]platformName=AndroidappPackage=com.sheinsideappActivity=.module.GuideActivitybaseUrl=http://0.0.0.0:4723/wd/hubfindElementTimes=10[cmd]openAppium=nod

团队项目中个人的定位及计划

我们团队在这一次的移动APP开发计划中准备做一个针对上海地区大学分数线进行专业推荐的APP,根据前几章的学习,团队中的成员将会被初步分为开发人员.测试人员以及PM(program manager).我在这次的软件开发中担任开发人员的职务. 在开发开始的阶段,全员首先一起明确这次APP的主题,一起分析好这款APP将要实现怎样的功能,将要面向哪些受众:对于市面上的同类软件,我们还能添加哪些实用的功能.首先将会尽可能地将上海地区内高校近几年的分数线.每个系的最低录取分数统计好录入系统中,再根据考生相应

160504项目中的error

在学习时,曾经遇到将同组的项目导入时出现红叉的情况.但是没有发现具体错误.开始以为是build path 的问题,于是在Libraries中将相关Jar包重新检查并添加了一遍,但并没有解决问题.后来仔细检查后才发现,是一个很简单的问题,之前都想复杂了.JDK版本不一样,把JDK7换掉重新装JDK8,再把相关配置好,红叉就解决大半. 作为菜鸟程序员,有时候一个很小的问题就能造成很大影响.而经验不足时,更不知道从何入手.为了能顺利编写项目,更为了能在编写项目时能解决出现的问题和错误而不是不知所措,就

准备在新项目中使用pgsql

pgsql大象数据库 是我最近在关注的一款开源数据库,可以自由修改,没那么多限制,准备在新项目中使用 http://blog.163.com/[email protected]/blog/static/16387704020141229159715/

Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

标签: Android百度地图API Key  分类: Android 百度地图开发(2)  最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!   一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/a

设置tableview的滚动范围--iOS开发系列---项目中成长的知识三

设置tableview的滚动范围 有时候tableview的footerview上的内容需要向上拖动界面一定距离才能够看见, 项目中因为我需要在footerviw上添加一个按钮,而这个按钮又因为这个原因点不中,所以找到了解决办法! 添加如下方法即可 -(void)scrollViewDidScroll:(UIScrollView *)scrollView { self.tableView.contentSize = CGSizeMake(0,MZT_SCREEN_HEIGHT); }

06_在web项目中集成Spring

在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloService helloService = (HelloService) applicationContext.getBean("helloS