STM32开发点滴
2015-09-15 20:12
218 查看
上北邮研究生以来,恍恍惚惚已经过了一年,随着师兄师姐们陆续离开实验室去工作岗位,这下半年开始顿感压力很大,主要还是因为自己太水了,算法不精,语言不精,论文也没发,连身体都没锻炼好。所以这学期开始得要好好干点对得起自己的事了。就顺便记录一下即将交工的STM32的项目,也算是对自己的激励。
以前没怎么做过板子,就写点小程序,所以还是比较费劲的,但是写出来也不怕被笑话。刚开始看视频,看文档学习,然后试着写点类似HelloWorld的小程序。
用Keil开发的板子,一般都是用C,第一招学到的是定义头文件:
#ifndef __A_H
#define __A_H
...
#endif
这样可防止头文件的重复包含。
里面的_O,_IO一般都是定义valatile变量的,所谓的valatile变量就是要求编译器不要对其进行优化,而是每次都直接去读取变量值。所以可以用在一些定时上之类的。
当然,项目一般都少不了中断、显示器、文件系统等。期间也遇到过不少问题。
先说中断,在STM32的定时器中,对于多个定时器(TIMx)当需要同时配置的时候,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x)仅仅需要配置一次,当时不知道,用了TIM2、TIM3、TIM5都分别配置了,最终导致下载到板子里,显示屏老是启动,后来才发现是程序没跑起来。对了,如果加上按键中断的话,也是一样,一个程序中只能配置一次。
一般显示器的初始化都有外部初始化和内部初始化,默认一般使用内部,当显示器不亮的时候,可以试试外部供电。
说到程序下载,又是一摩尔问题,JTAG和Ulink换了好几次,现在用的是JTAG,但是我们板子用了SPI引脚,当时不知道,最后研究所里的一个师傅告诉我们当复用SPI时候,应该将JTAG使能,这里需要注意的是,使能后下载要使用SW下载,当时我们没有使能,导致时钟信号一直受干扰,妈蛋的,还是自己水平太菜啊。使能方法:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE)
特别要注意的是:只能使能JTAG,否则连SW都一起使能了就无法下载程序了,我当时就一起失能了,结果那块芯片坏了,网上也有很多将芯片冲刷的方法,大家可以参考一下,因为我们芯片还算便宜,所以就直接换了一个。
文件系统一般都是每个工程必要的,记得当时用的是一个小日本开发的文件系统,这样就省去了直接操作SD卡的麻烦,只需要配置一下接口,就可以使用文件系统里的函数了。做的还不错,唯一要提醒大家的就是:文档最关键,用函数什么的多去参考参考API,设置完参数,就OK了,这样会省很多事。
还有些调功能代码的就不一一列举了,大神就别见笑了。
当然,项目开发中还有很多点滴,会遇到很多问题,特别是做硬件方面,还有很长的路要走,个人其实不是很喜好做硬件,因为要弄驱动、板子、调程序,确实比较繁琐,做软件差不多就是调bug了。但是在实验室没有办法,有什么项目就得做什么项目,和老师同学处好关系,发好论文,以后找个好工作,回成都陪女朋友,也就安心了也。
此篇博客并没有什么真正的技术含量,纯属鼓励自己罢了,现在在实验室在做裁剪安卓源码在开发板上实现功能的项目,等做完了再发偏心得吧,加油!
以前没怎么做过板子,就写点小程序,所以还是比较费劲的,但是写出来也不怕被笑话。刚开始看视频,看文档学习,然后试着写点类似HelloWorld的小程序。
用Keil开发的板子,一般都是用C,第一招学到的是定义头文件:
#ifndef __A_H
#define __A_H
...
#endif
这样可防止头文件的重复包含。
里面的_O,_IO一般都是定义valatile变量的,所谓的valatile变量就是要求编译器不要对其进行优化,而是每次都直接去读取变量值。所以可以用在一些定时上之类的。
当然,项目一般都少不了中断、显示器、文件系统等。期间也遇到过不少问题。
先说中断,在STM32的定时器中,对于多个定时器(TIMx)当需要同时配置的时候,NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x)仅仅需要配置一次,当时不知道,用了TIM2、TIM3、TIM5都分别配置了,最终导致下载到板子里,显示屏老是启动,后来才发现是程序没跑起来。对了,如果加上按键中断的话,也是一样,一个程序中只能配置一次。
一般显示器的初始化都有外部初始化和内部初始化,默认一般使用内部,当显示器不亮的时候,可以试试外部供电。
说到程序下载,又是一摩尔问题,JTAG和Ulink换了好几次,现在用的是JTAG,但是我们板子用了SPI引脚,当时不知道,最后研究所里的一个师傅告诉我们当复用SPI时候,应该将JTAG使能,这里需要注意的是,使能后下载要使用SW下载,当时我们没有使能,导致时钟信号一直受干扰,妈蛋的,还是自己水平太菜啊。使能方法:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE)
特别要注意的是:只能使能JTAG,否则连SW都一起使能了就无法下载程序了,我当时就一起失能了,结果那块芯片坏了,网上也有很多将芯片冲刷的方法,大家可以参考一下,因为我们芯片还算便宜,所以就直接换了一个。
文件系统一般都是每个工程必要的,记得当时用的是一个小日本开发的文件系统,这样就省去了直接操作SD卡的麻烦,只需要配置一下接口,就可以使用文件系统里的函数了。做的还不错,唯一要提醒大家的就是:文档最关键,用函数什么的多去参考参考API,设置完参数,就OK了,这样会省很多事。
还有些调功能代码的就不一一列举了,大神就别见笑了。
当然,项目开发中还有很多点滴,会遇到很多问题,特别是做硬件方面,还有很长的路要走,个人其实不是很喜好做硬件,因为要弄驱动、板子、调程序,确实比较繁琐,做软件差不多就是调bug了。但是在实验室没有办法,有什么项目就得做什么项目,和老师同学处好关系,发好论文,以后找个好工作,回成都陪女朋友,也就安心了也。
此篇博客并没有什么真正的技术含量,纯属鼓励自己罢了,现在在实验室在做裁剪安卓源码在开发板上实现功能的项目,等做完了再发偏心得吧,加油!
相关文章推荐
- 数据结构与算法分析(c++版) #3 顺序表的实现
- UIImagePickerController的静态方法
- 数位dp
- 第六天 :Vim 编辑器和使用技巧
- 火星加法(20进制加法
- 在Mac OSX下安装和使用GO语言
- Android下载任务队列实现
- URL传参中不能带特殊的字符以及处理方案
- HDOJ 1005 Number Sequence
- HDOJ 1005 Number Sequence
- (转)C语言union(联合体 共用体)
- Ember copy array
- 分析黑盒测试
- POJ 3237 Tree 树链剖分 边权
- UIPageControl
- 新安装Win10
- Ember copy array
- html初学-简介
- Jquery 写的注册判断
- 创建设备节点