找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2064|回复: 1
打印 上一主题 下一主题
收起左侧

STM32练手总结

[复制链接]
跳转到指定楼层
楼主
ID:99624 发表于 2015-12-27 03:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  刚刚做完一个练手的项目,写一下心得总结。
   1、关于全局变量,因为一个项目必然会有很多的.c和.h。固然会用到全局变量,在一个.c中定义一个变量,在其.h中用extren声明该变量,将该变量包含到其他的.c中,那么其他的.c也就能使用该变量了。
   2、现在写单片机程序的基本框架就是,把每一个用的外设分为一个个模块,在定时器中分时间逐个扫描。但是,发现了一个弊端,就是如果该时间扫描时间过长,就会导致中断混乱,不能按时进入或者跳出中断。所以,就仅仅再定时器中断里面用标志位进行置位,在while(1)中进行判断,定时一段时间给需要扫描时间长的函数。一般定时器扫描应该是比较快的,因为快,所以任务进行不完,下一次中断已经来了,比如一个任务需要10ms,而定时器中断是2ms,那么就会出现错误,所以就让10ms之内一直做这个任务,虽然定时器还是会中断,在进行完这件事之前,标志位不会置位为其他事件。
3、在用屏幕的时候出现的一个问题。屏幕虽然厂家会给出官方的显示函数,直接调用即可,但是有时不符合自己的要求,比如想要显示一个变量等等(其实还是自己基础不行哈);

这是一个显示函数


可以看出,他的第三个形参是一个指针形变量,但是再写实参的时候,该如何写变量呢?
有两种方法:
指针型变量,指向的是地址。前者“字符串”,指针指向字符串第一个字符地址,使字符一个一个显示,直到遇到字符串结束符“\0”显示结束。后者,定义High[]为一个数组,把需要显示的变量分成百位、十位、个位等等。。。在分别放到数组里面,关键的是,数组最后一个值要放“\0”,否则,无法判断是否需要显示结束。将数组命作为实参,道理如上。
一开始,我显示变量的时候用的是&在加上变量,可是因为没有结束符“\0”,导致无法判断显示结束,而出现错误。
4、用到了睡眠模式,其实就是一条内核指令,只要执行就能进入睡眠状态,一开始睡眠指令放在定时器中断里面了,发现竟然睡不着。。。拿出来才行了。在一个就是唤醒,有两种方式,取决于你进入睡眠的指令,我用的是任意中断唤醒,所以如果程序中用的定时器中断等等的话,要先关闭这些中断,只留下你自己设定的用来唤醒的中断线就好。
5、上电复位,有两种上电复位的方法,一种是,不清除寄存器的配置。另一种是将寄存器配置清除掉,其实来说,这种方法,就好似硬件复位。
    具体指令:
      __set_FAULTMASK(1);
         NVIC_SystemReset();

好了结束了




评分

参与人数 1黑币 +2 收起 理由
jinhua1916 + 2

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:285686 发表于 2018-8-7 11:31 | 只看该作者
感觉很不错,赞赞赞!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表