OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: 龙之谷

菜鸟开帖,持续更新90天,顺序学习开发板大部分实验,以此帖作为一个坚持的动力

  [复制链接]

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-26 21:41:16 | 显示全部楼层
回复【50楼】正点原子:
---------------------------------
回头看看,确实着急了,写的也有些杂了,明天再写的时候改进一下方式,嘿嘿
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-19
在线时间
0 小时
发表于 2015-7-27 10:54:12 | 显示全部楼层
哈哈哈,好多人鼓励你啊。
我就是按原子哥的一步步学下来的
回复 支持 1 反对 0

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-27 19:07:52 | 显示全部楼层
回复【52楼】cxran2wms:
---------------------------------
是啊,坛友都很正能量,嘿嘿
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-27 22:00:56 | 显示全部楼层
第〇六天  2015年07月27日  周一     例程:看门狗实验



1.看门狗注意事项



2.看门狗溢出时间



其中,prep取值范围【0,7】,rlr为低12位有效重装载寄存器装载值,取值【1,4095】。


3.在开发指南中只使用到了一个指示灯来展示给我们不进行喂狗的复位现象,在此基础上我们可以把另外一个指示灯有效利用起来,如图添加到喂狗操作之后来直接提示我们进行了喂狗操作。
[mw_shl_code=c,true] while(1) { if(Key_Scan(0) != 0) { Wdg_Feed(); LED1 = !LED1; } delay_ms(10); }[/mw_shl_code]

4.分频:
将一单一频率信号的频率降低为原来的1/N,就叫N分频。如把33MHZ的信号2分频得到16.5MHZ的信号,3分频得到11MHZ的信号,10分频得到3.3MHZ的信号。
 倍频:将频率提高到原频率的N倍,就是N倍频,原先并没有倍频概念,CPU的主频和系统总线的速度是一样的,但CPU的速度越来越快,倍频技术也就应运而生。它可使系统总线工作在相对较低的频率上,而CPU速度可以通过倍频来无限提升。那么CPU主频的计算方式变为:主频 = 外频 x 倍频。也就是倍频是指CPU和系统总线之间相差的倍数,当外频不变时,提高倍频,CPU主频也就越高。




关于struct的那些事:

1.结构(struct)是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。


2.结构定义



结构名是结构的标识符不是变量名,结构名不是必须的,省略它则成为无名结构(记忆中,但未找到确切资料佐证:如果定义多个无名结构是可以的,系统内部会进行区分,但此时定义结构变量时一定紧跟结构定义之后)。构成结构的每一个类型变量称为结构成员,它像数组元素一样,但数组中元素是以下标来访问的,结构则是按变量名来访问成员的。


3.结构变量定义

定义方式一:


上图定义了一个结构名为string的结构变量person,如果省略变量名person,则变成对结构的说明。
用已说明的结构名定义结构变量则为定义方式二。
定义方式二:



4.结构变量的使用

结构成员的表示方法为:结构变量.成员名
可以将“结构变量.成员名”看作一个整体,则这个整体的数据类型于结构中该成员的数据类型相同,就可像普通变量一样进行各种运算等,非常简单方便。
对结构变量的初始化可以统一初始化,也可分别初始化。如可令person.age = 20等。

5.结构简单的实际应用

第一,常见的是将一些相关度比较高的变量集中在一起,如日期可以定义为
struct date
{
   char second;
   char minute;
   char hour;
   char day;
   char month;
   int year;
}tm;
如果需要使用多个时间变量,这样的定义就方便许多,同时将其进行了模块化,维护也变得简单。
第二,在第一的基础上,个人感觉,当工程比较大的时候可以每个文件为它自身的全局变量定义一个结构体,比如串口实验中,可能会使用到接收数组、数组下标、接收完一组数据标志位,可定义为
struct uart2
{
   uchar Flag;
   uchar Num;
   uchar table[256];
}UART2;
这样的话即使变量多也比较容易区分与处理,此点也是重新熟悉学习struct的原因所在,打算在以后的工作中进行使用。




【1】http://baike.baidu.com/link?url=CVV6lDRXMqlX7oVw96CPBFjhM2DCkHTP6rEU2dzX7PIW9RwLHIsh_wcoLRiYTot1dquwwzB-vsWnOEFgsS4hH_
【2】http://baike.baidu.com/link?url=xMm3HT6IIcMpkC2ue5zsHC9cb_qIbyL-1HaoKCBj6c8E7rFSphJUEdB25NWxhZlbs-DmhQ5oa-K1KECcH0DeSq
【3】http://www.openedv.com/posts/list/33246.htm
【4】http://www.alex999.com/c_language_structure.html
【5】http://blog.sina.com.cn/s/blog_8c798c6c0100u1f0.html(结构体字节对齐--本文未介绍)
【6】《C语言程序设计》--谭浩强老师     (注:以后涉及到C语言的基本都会参考此书,故仅在此标明一次)
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

18

主题

139

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2014-10-29
在线时间
228 小时
发表于 2015-7-27 22:30:39 | 显示全部楼层
帅气,龙哥,每晚跟着你学
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-27 22:37:11 | 显示全部楼层
回复【54楼】龙之谷:
---------------------------------
顶,再来一篇给你置酷
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-27 22:52:06 | 显示全部楼层
回复【55楼】persevere:
---------------------------------
谢谢支持,互相学习,哈哈
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-27 23:03:02 | 显示全部楼层
回复【56楼】正点原子:
---------------------------------
稍等等,原子哥,本来我还想我写到什么时候你能给个酷,最坏情况是坚持到90天的时候你因为我的耐力给了酷,我真是要找个地缝了

你的这句话给我很大鼓励,酷对我而言我还不足以承受,不要给我太大压力,倒是想坚持完90天后能够得到个酷,哈哈

还有就是我每天在人少的时候尽量统一回帖,减少自己登上最新回帖的几率,就是感觉自己的这些还拿不出手

非常感谢原子哥鼓励
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

22

主题

109

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2015-5-28
在线时间
0 小时
发表于 2015-7-27 23:12:25 | 显示全部楼层
回复【31楼】w417074951:
---------------------------------
我的想法也是如此,但是对于我等菜鸟来说,得首先把教程都理解了,懂了一些,然后在做小项目。
我这两天学GPIO和外部中断。都深刻理解了。然后自己做一个外部中断和按键的项目,优先级啥的自己在确定要求时随意写的。每一步 每个外设的程序我都重新敲出来,不去想原子哥的教程,仅仅是想它是如何来的,成为自己的内容。敲出来  这样掌握才会充分。
再不玩命努力,你就老了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-27 23:21:00 | 显示全部楼层
回复【58楼】龙之谷:
---------------------------------
好的,那就如你所愿,你能坚持90天,我送个礼品给你。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-28 20:19:46 | 显示全部楼层
回复【60楼】正点原子:
---------------------------------
受益于原子哥再收原子哥的礼品真是有点不好意思,不过蛮期待的,哈哈......
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-19
在线时间
0 小时
发表于 2015-7-28 20:46:26 | 显示全部楼层
回复【60楼】正点原子:
---------------------------------
哈哈哈,原子哥太有情怀了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-28 22:27:46 | 显示全部楼层
回复【61楼】龙之谷:
---------------------------------
别客气,我奖励勤奋的学生。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-28 22:27:54 | 显示全部楼层
回复【62楼】cxran2wms:
---------------------------------
呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-28 23:19:20 | 显示全部楼层
第〇七天  2015年07月28日  周二     例程:再谈独立看门狗

一下班就开始整理,中间就吃了个饭,写到九点半的时候,把第一部分写完了,关闭其他窗口时错把浏览器窗口关掉了,整个人都不好了,简直震惊了……以后还是先用word写,崩溃了。所以大家看到的第一部分是我含着眼泪写完的!!!



1.
 独立看门狗分为硬件看门狗和软件看门狗两种。

2.
软件使能是通过软件设置寄存器位配置,软件使能的看门狗,只有在设置了相应的寄存器位后才能开始工作,一旦开始工作,只有系统复位才能让它停止工作。 我们通常使用的看门狗即通过配置寄存器使能的就是软件看门狗。那么我们是否可以纯软件使能与去除使能(软件)看门狗? 

[mw_shl_code=c,true] while(1) { k = Key_Scan(0); if(k == KEY1_PRESS) { IWDG->KR = 0XCCCC; //使能看门狗 } if(k == KEY0_PRESS) { Wdg_Feed(); LED1 = !LED1; } if(k == KEYUP_PRESS) //软件复位 { Sys_Soft_Reset(); } delay_ms(50); }[/mw_shl_code]



如上图,在原子哥例程基础上主要进行如下调整:1.将软件使能看门狗语句从看门狗初始化函数中剪切到if判断语句中;2.sys.h中软件复位函数复制到if判读语句中。结合按键操作我们可以得出:

第一,不使能看门狗但进行喂狗操作不会对程序运行产生影响,推至寄存器层面分析,我们对一个无关紧要不起作用的寄存器进行写操作除了浪费一点时间外确实不会产生其他影响。第二,注释掉第二条if判断,保持喂狗操作和指示灯翻转保持运行,此时按下按键使能看门狗,程序照常运行,我们再按下复位key_up按键,此时程序重启启动,看门狗则从使能状态转为去除使能的状态,我们实现了基于同一程序的软件控制(软件)看门狗使能与去除使能的功能。


3.STM32的独立看门狗可以是硬件使能或软件使能,硬件使能是通过设置选择字节配置,硬件使能的看门狗,在系统上电之后就开始工作,一旦开始工作就没有办法让它停止工作且必须通过擦除相应的选择字节位关闭硬件看门狗功能。




通过上图可以发现,硬件看门狗应该是写在了
flash中,整个过程我们通过烧写程序过程完成,而程序运行中并没有参与使能,所以复位后硬件看门狗状态不会变化。那么,我们是否可以通过软件来控制硬件看门狗的使能于去除使能呢?
在此,个人想法:我们可以类比于软件控制软件看门狗以及开发指南stmflash章节原理,在程序运行时通过改写相应选择字节来关闭硬件看门狗,至于是否能够在运行时改写相关字节而不影响单片机正常工作以及改写是否成功则有待验证。在此不作验证的原因:其一,网络关于硬件看门狗资料较少,其选择字节所在位置没有查到;其二,涉及到stmflash章节,虽有些许了解,没有进行实际多次测试,还待进一步掌握;其三,实际应用价值不大,甚至我们一般都用不到硬件看门狗;其四,今天实在没有时间了。(mark-----待验证)




狡兔三窟的enum

1.枚举:将变量的值一一列举出来,变量的值只限于列举出来的范围之内。之所以叫枚举,也可以说是可以把存在的情况或值一一列举出来。

2.枚举变量定义方式与结构变量定义方式基本一致。如



上图中的标识符就是枚举变量可以被赋予的整型常数,因为数据类型都是固定的整形常数,所以直接使用标识符而无需数据类型的修饰

可以在声明的时候对枚举变量的每一个元素进行整型常数赋值,而如果没有进行赋值操作,则系统自动从0开始递增进行赋值操作,期间,如果某一元素进行了赋值,则其后未被赋值元素会以它的值为基础依次递增自动赋值。


加入enum box BOX1;则我们可以通过BOX1 = pen;来给枚举变量进行赋值,但不可以对其进行直接赋算数值的错误操作如BOX1 = 4则是错误的,这时需要强制类型装换才可以,如BOX1 = (enum box)4,才是正确的。

3.枚举变量中的每一个枚举元素都是按常量处理,不可在程序中对它进行除声明外的其他赋值操作。


4.枚举变量的应用比较明显的体现就是星期数,星期几有从周一到周日的七种情况,但具体到某一天是周几则是确定的,不可能某一天既是周一又是周二,也就是说枚举变量具有唯一指定性。


5.枚举的简单实际应用

我们可以把某一只具有少数整型取值值的变量定义为枚举变量,如状态标志位flag,只有两种状态,可以定义为
enum BOOLE
{
    err = 0;
    true = 1;
}
flag;
这样的处理便于程序的管理与维护,增强了可读性。

6.来个可能不是很形象的比喻:一个兔子窝有三个门,分别是M1、M2、M3,这是固定的,兔子从洞里出去需要穿过哪个door?这个door就可以定义为枚举变量,而M1、M2、M3则分别是它可取值的
元素。

7.结构只是对不同变量进行了统一管理,结构中元素之间没有直接的关系,只是我们逻辑上认为比较靠近的变量的统一管理,每个变量可以是任何数据类型,可以参加运算
;而枚举则是枚举变量对枚举元素的唯一性选择,枚举元素之间是彼此互斥的整型变量。




【1】http://www.openedv.com/posts/list/5033.htm
【2】http://bbs.21ic.com/icview-163512-1-1.html
【3】http://www.21ic.com/jichuzhishi/2012-10-12/146626.html
【4】http://wenda.haosou.com/q/1369032011064427?src=150
【5】http://blog.csdn.net/logogcn/article/details/7879398
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-28 23:25:08 | 显示全部楼层
回复【63楼】正点原子:
---------------------------------
偶上班快三年了,从事相关工作倒是不到一年...

把你当成老师,自己确实还是个成绩不太好的学生...
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-28 23:27:17 | 显示全部楼层
回复【65楼】龙之谷:
---------------------------------
顶你。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-28 23:39:13 | 显示全部楼层
鉴于今天发生的写好部分被自己误操作丢失,开启一下吐槽模式

科目二刚报上名,8月19日考试,还有差不多三周时间,20个课时,周六周日每天刷四个课时的节奏。这两周老工程师又给安排了开发小东西的任务,急着做出来,昨天工程师指导了原理图,今天初步布局了PCB,明天尽量把PCB线连接个大部分,争取后天发送制板,然后留一周时间左右编程,希望一切顺利吧。

每天更新一篇小短文,用时远超预期,今天由于重写第一部分总共用了估计五个小时,我勒个去,这也让自己渐渐认识到写书的难度有多大,写出经典的书籍难度更是不必说,在此,向每一位真心写书的作者致敬!
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-29 00:09:25 | 显示全部楼层
回复【68楼】龙之谷:
---------------------------------
可以先在word里面编辑好,然后黏贴过来,比较不容易出问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-7-29
在线时间
0 小时
发表于 2015-7-29 18:03:33 | 显示全部楼层
等楼主更新 顶!
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-1-18
在线时间
0 小时
发表于 2015-7-29 20:04:55 | 显示全部楼层
太强了,好会举一反三
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-29 23:30:13 | 显示全部楼层
第〇八天  2015年07月29日  周三     例程:窗口看门狗



1.关于窗口看门狗在开发指南V1.1版本148页中的窗口计数器T【6:0】共七位参与窗口看门狗超时工作,此页所提到的T【5:0】应该是书写错误,我记得好像论坛里坛友已经对此进行了指正,请注意。

2.通俗的说,窗口看门狗就是一个既不能早喂也不能晚喂的狗,喂的早就会把狗“撑死”,单片机复位,喂的晚就会把狗“饿死”,单片机同样复位,这两种情况就是对应的上下窗口。而上一个例程的独立看门狗最大的区别在于独立看门狗不能喂的晚,但可以在它饿死前任何时刻喂狗,哪怕你从打开看门狗开始就不停喂狗。从这个意义上说,窗口看门狗具有更加严格的监视功能。


3.超时计算公式



4.超时时间表



最小超时就是喂狗不得低于的时间,在此时间内喂狗,则喂狗过早,窗口看门狗会“撑死”;最大超时则是和独立看门狗道理一样,如果超过这个时间喂狗,看门狗已经“饿死”。

5.窗口看门狗带有提前唤醒中断,开启后,在窗口看门狗要“饿死”前的瞬间会进入中断,在中断处理事项。在中断处理中是否喂窗口看门狗大家持不同看法:一种如开发指南中的在窗口看门狗中断中进行喂狗;第二种则是不可在窗口看门狗中断中进行喂狗,只能在此写下复位前的“遗嘱”,如保存重要数据等(见相关链接)。

6.我感觉第二种做法应该是更加充分的利用了窗口看门狗的特性,窗口看门狗比独立看门狗严格之处在于程序人员需对窗口看门狗两次喂狗动作间的程序运行时间把握的很准确,一旦程序跑到其他非预期处很有可能窗口看门狗会“饿死”或“撑死”,而一般程序中满山遍野的独立看门狗喂狗操作则不容易检查到这种跑飞情况。如果把窗口看门狗的喂狗操作放入中断中,它的这个特点则不会充分体现出来。

7.今天在实验主要是基于不在中断中喂狗这个前提下进行的简单实验,也是参考了坛友的程序,主函数处理如下
[mw_shl_code=c,true] wr = WWDG->CFR & 0X7F; //window value tr = WWDG->CR & 0X7F; //counter value if(tr < wr && flag == 0) { Wwdg_Feed(WWDG_CNT); printf("正在喂狗!\r\n"); } if(Key_Scan(0) == KEY0_PRESS) { flag = 1; //是否喂狗标志位,置位后停止喂狗操作 }[/mw_shl_code]

如上图,一旦达到喂狗条件便开始喂狗,保持程序正常运行,flag是一个标志位,一旦按键key0按下则置位flag停止喂狗,窗口看门狗即将超时的时候会进入唤醒中断,我们在中断中进行如下处理(写下“遗嘱”),等待系统复位。
[mw_shl_code=c,true] WWDG->SR = 0X00; //clear flag LED1 = !LED1; printf("进入中断\r\n");[/mw_shl_code]



共用体union
1.定义:使几个不同的变量共同占用同一段内存的结构成为共用体。

2.共用体变量与结构体变量定义方式类似,共用体与结构的区别在于共用体所占内存长度为最长成员的长度,而结构则是大于(字节补充对齐引起)等于各成员所占内存的总和。

3.共用体特点:其一,同一内存段可以用来存放几种不同类型的成员,但在每一瞬时能且只能存放一个成员,即只有其中某一个成员是有效;其二,共用体变量中起作用的是最后一次放进去的成员,在存入一个新的成员数据后,其他成员都失去作用;其三,共用体变量的地址和它各个成员的地址是同一地址;其三,不能在定义共用体变量时对它初始化。

4.假如定义,
union data
{
    uchar i;
   uchar j;
    uint   k;
}a;
则可以在程序中赋值a.i = 5;此时可以引用共用体变量中的i成员,当然此时的j成员如果使用的话也是等于5,因为他们的地址是一致的。

5.共用体可以把几个同一时刻彼此互斥、不会同时被使用的变量放在同一起始地址的区域中,使用得当,共用体可以有效节省空间,提高程序的紧凑性。简单使用实例
假设有若干人员的数据,其中有学生和教师。学生数据包括:姓名、号码、性别、职业、班级。
                                                               教师数据包括:姓名、号码、性别、职业、职务。
可以看出,学生和教师所包含的数据只有最后一项是不同的,可以统一进行管理:
struct data{
    int num;
   char name[10];
    char sex;
    char job;
    union{
        int banji;
        char position[10];
    }category;
}person[2];     //先假设人数为2人
从上定义可以看出,班级或职务两个变量在不同job的情况下只有一个变量有效的,班级和职务是不会同时出现的,由每个人员job来确定确定需要处理的是班级还是职务信息。当然,我们可以不使用共用体,把两个变量同时定义,不适用的变量赋值为0,但显然使用共用体节省了空间,并且更符合人们平常的表格思想。






【1】http://www.openedv.com/posts/list/13292.htm
【2】http://blog.csdn.net/jiangnanyouzi/article/details/3158702
【3】http://c.biancheng.net/cpp/html/450.html
【4】http://www.openedv.com/posts/list/0/56555.htm#322181
【5】http://www.openedv.com/posts/list/0/6274.htm#322182
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-29 23:30:58 | 显示全部楼层
回复【69楼】正点原子:
---------------------------------
吃一堑长一颗痣,哈哈
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-29 23:31:53 | 显示全部楼层
回复【70楼】葫芦兄弟:
---------------------------------
回复【71楼】ch_1964:
---------------------------------
谢谢支持,共同进步...
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-30 00:59:49 | 显示全部楼层
回复【72楼】龙之谷:
---------------------------------
顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2014-4-2
在线时间
84 小时
发表于 2015-7-30 08:00:23 | 显示全部楼层
marking……
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-30 14:09:25 | 显示全部楼层
坚持超过一周了,楼主不容易啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-30 20:32:31 | 显示全部楼层
坐等楼主今晚更新。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-9-2
在线时间
0 小时
发表于 2015-7-30 23:07:09 | 显示全部楼层
回复【78楼】正点原子:
---------------------------------
哈哈,彼此彼此。每天向楼主学习已经成为一种习惯,好有正能量。其实我更想了解的是关于工作的一些情况,毕竟我身处学校,膜拜外面搞技术的大神。
趁着年轻,追逐自己所爱的----单片机&&足球!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-30 23:31:16 | 显示全部楼层
回复【79楼】非洲小男孩:
---------------------------------
楼主今天还没更新,是不是有什么变故啊,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-30 23:49:43 | 显示全部楼层

第〇九天  2015年07月30日  周四     例程:定时器中断实验


1.定时计数器分类:STM32F4定时器有TIME1和TIME8等高级定时器,也有TIME2~TIME5、TIME9~TIME14等通用定时器,还有TIME6和TIME7等基本定时器,总共有14个之多。

2.三种定时器区别



3.频率:物质在1s内周期变化的次数叫做频率。常用f表示,单位为Hz,与周期成倒数关系,即1Hz=1/s。为加深记忆,按部就班计算,1KHz即为1s变化1000次,即1ms变化1次1KHz = 1/ms,同理1MHz = 1/us。

4.溢出Tout时间计算公式:     Tout = ((arr+1)*(psc+1))/Tclk;
其中,arr为自动重装值;
          psc为时钟预分频数;
          Tclk为输入时钟频率,本例程TIME3为84Mhz。

根据例程,当psc为(8400-1)时,即进行8400分频,此时技术频率为84MHz/8400 = 10KHz,也就是1s计数10K次,每次计数需耗时1/10000(s)。计数arr次需耗时arr*(1/10000)(s),等效于arr*(1/10)(ms),所以,当arr为(5000-1)时,每次溢出需5000*(1/10)(ms),即500ms。

5.例程中,将两个指示灯分别用于主函数和中断中闪烁,可以在此基础上,通过定义一个全局标志变量flag来使两个指示灯几乎同步,观察延时函数和定时计数器两者是否吻合。
定义一个全局变量flag以后,进行如下调整:其一,在中断函数中添加flag

void TIM3_IRQHandler(void)

{

        if(TIM3->SR & 0X0001)

        {

               LED1 = !LED1;

               flag = 1;     //一旦进入中断则置位同步标志位

        }

        TIM3->SR &= ~(1 << 0);

}

其二,将主函数进行一些调整

        while(1)

        {

               while(flag == 0)     //等待同步标志位置位

               {

                   delay_us(2);

               }

               LED0 = !LED0;

               delay_ms(500);

        }

此时主函数小灯闪烁频率为1s,定时计数器溢出时间为500ms,定时计数器一旦中断则置位标志位,两个小灯几乎同步开始闪烁,两者误差不超过2us,实际测试可以观察到两个小灯同步进行闪烁。此时我们将主函数中delay_ms(500)改为delay_ms(400),则可以观察到LED0每闪烁5次的同时LED1恰好闪烁4次,与预期一致,说明定时计数器与延时函数两者之间是协调的,如果有秒表等设备进行监测,应该会发现它们都是准确的。



位段
1.信息的存取一般以字节为单位。实际上,有时存储一个信息不必用一个或多个字节,如真、假二值判断。在计算机用于过程控制、参数检测或数据通信领域时,控制信息只占一个字节中的一个或几个二进制位,常常可以在一个字节中放几个信息。

2.位段:C语言允许在一个结构中以位为单位来指定成员所占内存长度,这种以位为单位的成员成为位段或位域(bit field)。利用位段能够用较少位数存储数据。

3.位段变量与结构变量定义类似。位段示意图



4.注意事项
其一,位段成员类型必须指定为unsigned或int类型;
其二,若某一位段要从另一个字开始存放,可用以下形式定义
unsigned   a:1;
unsigned b:2;//一个存储单元       
unsigned:0;
unsigned c:3;//另一存储单元 
     a、b、c应连续存放在一个存储单元中,由于用了长度为0的位段,其作用是使下一个位段从下一个存储单元开始存放。因此,只将a、b存储在一个存储单元中,c另存在下一个单元(“存储单元”可能是一个字节,也可能是2个字节,视不同的编译系统而异)。  
其三, 一个位段必须存储在同一个存储单元中,不能跨两个单元,如果第一个单元空间不能容纳下一个位段,则该空间不用,而从下一个单元起存放该位段。
其四,位段的长度不能大于存储单元的长度,也不能定义位段数组。
其五,位段可以在数值表达式中引用,它会被系统自动地转换成整型数。

5.同结构一样,我们可以把工程中仅需要几位来表示且功能性质比较相似的变量统一放在一块,节省空间的同时也便于管理。例如,程序中可能需要很多标志位,我们把这些标志位统一放在一个位段中,根据需要可以不断添加和去除,使其整体统一,框架清晰明了。

以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 1 反对 0

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-30 23:51:54 | 显示全部楼层
回复【78楼】正点原子:
---------------------------------
今晚回来巨困,稍睡了会,整理的时间晚了一个多小时,汗

今天发帖真够惊险的,点击发送,感觉网页有点卡住,赶紧复制粘贴到WORD,果然网速不给力发送失败,真险,哈哈
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 2 反对 0

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-30 23:52:54 | 显示全部楼层
回复【79楼】非洲小男孩:
---------------------------------
回复【80楼】正点原子:
---------------------------------
已更新,请看官查阅,哈哈
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

18

主题

139

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2014-10-29
在线时间
228 小时
发表于 2015-7-31 07:57:29 | 显示全部楼层
顶下,让更多的人能看到
回复 支持 反对

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-7-31 09:35:17 | 显示全部楼层
楼主加油,赞赞赞
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-31 11:07:44 | 显示全部楼层
回复【82楼】龙之谷:
---------------------------------
贵在坚持,呵呵。
搭上末班车了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

161

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5186
金钱
5186
注册时间
2013-3-16
在线时间
610 小时
发表于 2015-7-31 11:09:54 | 显示全部楼层
用什么编译器写的程序了、?
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-31 12:18:15 | 显示全部楼层
回复【87楼】西点:
---------------------------------
原子哥光盘中的MDK5
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

8

主题

161

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5186
金钱
5186
注册时间
2013-3-16
在线时间
610 小时
发表于 2015-7-31 20:07:19 | 显示全部楼层
回复【88楼】龙之谷:
---------------------------------一直用3/4,没有用5.。。。。
回复 支持 反对

使用道具 举报

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
发表于 2015-7-31 22:03:01 | 显示全部楼层
时间还早
楼主好好加油
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-31 23:04:31 | 显示全部楼层
2015年07月31日     今日更新前说明

今天进行了PWM实验,将整理部分简单概念性知识点,如有某位坛友不惜浪费时间在等楼主更新,今天可以做一些其他有意思的事情......

对于PWM实验,由于个人对此比较陌生,有一点抵触心理,相关材料也较多,一时整理不过来,另外明天还要加班,这几天也有点累了,等等等等不是理由的理由,就稍微整理了一点,给自己放个假......

祝好运!
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-7-31 23:10:53 | 显示全部楼层
回复【91楼】龙之谷:
---------------------------------
等你的更新啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-31 23:32:26 | 显示全部楼层
回复【84楼】persevere:
---------------------------------
回复【85楼】w417074951:
---------------------------------
回复【90楼】tuzihog:
---------------------------------
谢谢支持,共同进步
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-31 23:34:00 | 显示全部楼层
第一〇天  2015年07月31日  周五     例程:PWM实验(一)

1.脉冲宽度调制(PWM),Pulse Width Modulation,简称脉宽调制,是利用处理器地数字输出来对模拟电路进行控制的一种非常有效的技术。
2.预装载寄存器和影子寄存器关系:预装载寄存器是我们可以写入或读出的寄存器,而影子寄存器是我们看不见、无法真正对其读写操作的,但确实使用中真正起作用的寄存器。预装载寄存器的内容可以随时传送到影子寄存器,两者是连通的,或者在每一次更新事件时才把预装载寄存器的内容传送到影子寄存器。
设计预装载寄存器和影子寄存器的好处是所有真正需要起作用的寄存器(影子寄存器)可以在同一个时间(发声更新事件时)被更新为所对应地预装载寄存器的内容,这样可以保证多个通道的操作能够准确地同步。如果没有影子寄存器,软件更新预装载寄存器时,则同时更新了真正操作的寄存器,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道地时序不能同步,如果再加上例如中断等其他因素,多个通道地时序关系有可能会混乱,造成不可预知的结果。

相关链接:http://blog.sina.com.cn/s/blog_ad187b9601014to7.html



C语言程序设计(第三版)-谭浩强.ppt

7.98 MB, 下载次数: 502

以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-7-31 23:37:21 | 显示全部楼层
回复【92楼】正点原子:
---------------------------------
今天只是更新了一丢丢,相关知识点太多了,自己对PWM也比较生疏,算是偷懒了

今天正好第十天,以后每十天偷懒一天,哈哈......
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-8-1 11:29:24 | 显示全部楼层
回复【95楼】龙之谷:
---------------------------------
不能偷懒啊,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-9-2
在线时间
0 小时
发表于 2015-8-1 13:23:39 | 显示全部楼层
回复【95楼】龙之谷:
---------------------------------
     可以理解。白天上班,晚上回去还想休息一下,真正深入研究32的时间不多,加上总结又会花掉一部分时间,这已经到了11点半。我的建议其实也不一定每天都得更新,主要还是总结一些精华的东西,深入研究。仅供参考,哈哈。
趁着年轻,追逐自己所爱的----单片机&&足球!
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-1 20:08:15 | 显示全部楼层
回复【96楼】正点原子:
---------------------------------
面壁......
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-1 20:19:19 | 显示全部楼层
回复【97楼】非洲小男孩:
---------------------------------
非常感谢你的建议

之所以每天都更,主要是克服一下我个人的惰性,另外就是自己选的路,跪着也要走玩,开帖标题搁那了,当初标题“意气”用事了,哈哈

以自己现在水平,现阶段还玩不出比较上档次地实验,所以只能先打打基础,帖子里很多都是非常基础的点,恰恰也是自己会犹豫的点,所以就整理出来了

C语言的很多一些生疏地知识点如结构、联合等,基本整理出来了,以后这部分就不会每天准备了,整理工作减轻了一些,把更多精力放在实验上
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

18

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
593
金钱
593
注册时间
2015-4-14
在线时间
47 小时
发表于 2015-8-1 21:09:58 | 显示全部楼层
楼主好牛逼,顶你,我也以你作为榜样学习
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 10:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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