刚刚做了我的第一个嵌入式项目----基于STM32F103的频率和AD採集系统。

是一个大系统的一个部分。没用操作系统,使用库函数编写,尽管东西非常easy。可是对于我这个还没入门的菜鸟来说还是有点难度的。

前后断断续续已经两周多了。到眼下为止系统已经完毕了接近90%,在这个过程中犯了非常多错误。也走了非常多的弯路。在这里记录下来。让自己以后不要再犯相同的错误。也给那些和我一样刚入门的朋友一点提示。

1、USART初始化问题:

STM32F103启动文件默认有两个入口。一个是systemInit(),还有一个是main(),当中systemInit默认是用户编写的软件初始化部分。

開始时我把时钟、GPIO、USART、定时器、EXTI、NVIC、ADC的初始化都放在了systemInit函数中,但是在測试中却发现USART初始化不成功。USARTport初始化成功的话默觉得高电平,而在实际測试中却发现USARTport为低电平,第二次初始化却能成功初始化,这个问题困扰了我N天的时间。

串口初始化不成功,后面的程序就无法进行。

错误原因:我在main函数中定义了几个全局变量。用于在中断中作为标记使用(中断中尽量不要放太多程序。最好仅仅做一个标记,处理程序放到主程序中来完毕)。

我把中断的初始化放在了systemInit函数中,在初始化过程中中断比mian初始化要早,但全局变量的定义都是在main中,所以导致了中断初始化失败。进而导致后面的程序初始化失败。而在第二次执行时,由于第一次已经给main中的变量分配空间,所以中断以及后面的程序都能成功执行。

错误处理:将除了时钟以外的模块都放入main中初始化,这样就保证了main中的全局变量可以成功分配空间。

(一定记住这个血淋淋的教训,还因此被老师狠狠歧视了一番。。

。)

2、中断问题:

程序要用到外部中断。可是在调试过程中发现程序无法进入中断。開始分析有两个原因,一是外部硬件设计问题,不能触发中断;二是中断没有初始化成功,中断向量或者中断通道没有成功初始化。

对于第一个分析,用示波器检測后发现port电平有变化。说明硬件设计没有问题,问题出在软件上面。

開始时。我的中断向量初始化代码把配置中断引脚中断的代码放到了一起。

是这种:

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource0|GPIO_PinSource1|GPIO_PinSource2|GPIO_PinSource3|GPIO_PinSource4|GPIO_PinSource5);
/*配置中断引脚对应參数*/
EXTI_InitStruct.EXTI_Line=EXTI_Line0;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//设定中断模式为中断处理模式
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;//设定中断触发模式为上升沿触发
EXTI_InitStruct.EXTI_LineCmd=ENABLE;//使能中断
EXTI_Init(&EXTI_InitStruct);//依照结构体初始化中断
EXTI_InitStruct.EXTI_Line=EXTI_Line1;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//设定中断模式为中断处理模式
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;//设定中断触发模式为上升沿触发
EXTI_InitStruct.EXTI_LineCmd=ENABLE;//使能中断
EXTI_Init(&EXTI_InitStruct);//依照结构体初始化中断
..........

后来经过查阅手冊得知。这样是不对的,事实上每一个引脚跟每一个中断线路是一一相应的。不能一起配置,要一对一配置。

解决:将代码改成这样就攻克了:

	/*将GPIOE0-7引脚配置为中断引脚*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource0);
/*配置中断引脚对应參数*/
EXTI_InitStruct.EXTI_Line=EXTI_Line0;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//设定中断模式为中断处理模式
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;//设定中断触发模式为上升沿触发
EXTI_InitStruct.EXTI_LineCmd=ENABLE;//使能中断
EXTI_Init(&EXTI_InitStruct);//依照结构体初始化中断 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource1);
/*配置中断引脚对应參数*/
EXTI_InitStruct.EXTI_Line=EXTI_Line1;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//设定中断模式为中断处理模式
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;//设定中断触发模式为上升沿触发
EXTI_InitStruct.EXTI_LineCmd=ENABLE;//使能中断
EXTI_Init(&EXTI_InitStruct);//依照结构体初始化中断

/**************************************************未完待续**************************************************************/

STM32F103频率和AD採集项目总结的更多相关文章

  1. 开源 java CMS - FreeCMS2.3 Web页面信息採集

    原文地址:http://javaz.cn/site/javaz/site_study/info/2015/23312.html 项目地址:http://www.freeteam.cn/ Web页面信息 ...

  2. PHP採集CSDN博客边栏的阅读排行

    项目中要用到採集的数据,所以就先拿CSDN博客来试了试.这里使用Simple HTML DOM(官网)这个库,它可以方便的遍历HTML文档. <?php include_once('simple ...

  3. 数据採集之Web端上传文件到Hadoop HDFS

    前言 近期在公司接到一个任务.是关于数据採集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志採集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好近期都有在这方面 ...

  4. 《转》ceilometer的数据採集机制入门

    问题导读 1.ceilometer负责什么事情? 2.ceilometer 有哪些概念? 3.ceilometer 怎样採集hardware? 附上openstack 官网API   http://d ...

  5. C#实现麦克风採集与播放

    在网络聊天系统中.採集麦克风的声音并将其播放出来.是最基础的模块之中的一个.本文我们就介绍怎样高速地实现这个基础模块. 一. 基础知识 有几个与声音採集和播放相关的专业术语必需要先了解一下,否则.后面 ...

  6. 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)

    近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...

  7. [BLE]CC2640之ADC功能实现和供电电压的採集

    一.开篇 Write programs that do one thing and do it well ~~~~~ 发现非常多人关于使用CC2640/CC2650的过程中比較难以应对的问题就是实现A ...

  8. 基于lucene的案例开发:纵横小说分布式採集

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/46812645 http://www.llwjy.com/blogdetail/9 ...

  9. 手机Android音视频採集与直播推送,实现单兵、移动监控类应用

    最新手机採集推送直播监控以及EasyDarwin开源流媒体平台的版本号及代码: EasyDarwin 开源流媒体云平台:https://github.com/easydarwin EasyClient ...

随机推荐

  1. 关于编辑器对<input>标签报错提示“表单输入没有相关label”的问题

    相信很多朋友在制作表单的时候,我们的编辑器会有下图的相关提示吧 我们发现虽然这样并不影响我们的正常使用,但是看着这样的报错提示总是很让人心烦,那么这到底是为什么呢? 其实,这是因为编辑器建议我们在使用 ...

  2. win32窗口映射(部分)

    先理解一下“窗口”与“视区”的概念.“窗口”是逻辑坐标下的矩形区域,“视区”是设备坐标系下的区域.根据“窗口”和“视区”的大小可以确定x方向和y方向的比例因子. 例子如下: VOID OnPaint( ...

  3. jQuery——属相操作

    属性获取:attr(属性名), 属性设置:attr(属性名,具体值) 移除属性:removeAttr(属性名) 特殊情况:prop(属性名).prop(属性名,具体值):表单中状态属性checked. ...

  4. 常用的SSH注解标签

    常用的SSH注解标签 1.Spring的注解 关于配Bean用的        @Component        @Controller @Service @Repository        作用 ...

  5. Centos7 Openstack - (第二节)添加认证服务(Keystone)

    Centos7 install Openstack - (第二节)添加认证服务(Keystone) 我的blog地址:http://www.cnblogs.com/caoguo 根据openstack ...

  6. 关于react框架的一些细节问题的思考

    目录 setState到底是同步的还是异步的? 如何在子组件中改变父组件的state? context的运用,避免“props传递地狱” 组件类里有私有变量a,它到底改放在this.a中还是this. ...

  7. 20190625 Oracle优化查询(一)

    与其惴惴不安,不如定心应变 前提:我的Oracle服务器是安装在Windows环境中的,没有上到Linux 查看表结构 查询全表 查找空值, 使用“=”是没有结果的,应该使用IS NULL

  8. [HDU] 4507 恨7不成妻

    吉哥系列故事——恨7不成妻 Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  9. CF17E Palisection (回文自动机+DP)

    题目传送门 题目大意:给你一个字符串,让你求出有多少对相交的回文子串 啊啊啊啊降智了,我怎么又忘了正难则反! 求相交会很难搞.把问题转化成求互不相交的回文子串再减一下就行了 先利用$PAM$求出以每个 ...

  10. Django settings.py的一些配置

    官方文档:settings配置 静态文件配置链接 # 语言改为中文: LANGUAGE_CODE = "zh-hans" # 时区由UTC改为Asia/Shanghai,这样有关时 ...