OpenEdv-开源电子网

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

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

  [复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-8-12 00:07:58 | 显示全部楼层
回复【148楼】龙之谷:
---------------------------------
今天的很详细啊。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-12 23:19:59 | 显示全部楼层
第二二天  2015年08月12日  周三     例程:光敏传感器实验

1.光敏二极管也叫光电二极管,工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,随入射光强变化而变化,因而可以利用光照强度来改变电路的电流。
2.光敏传感器是利用光敏元件将光信号转换为电信号的传感器,它的敏感波长在可见光波长附近,包括红外波长和紫外波长。光传感器不只局限与对光的检测,还可以作为探测元件组成其他传感器,对许多非电量进行检测,只要将这些非电量转换为光信号地变化即可。

3.通过ADC采集电压,获取光敏传感器的电阻变化,从而得出环境光线地变化。
4.光敏传感器主要有:光电管、光电倍增管、光敏电阻、光敏三极管、太阳能电池、红外线传感器、紫外线传感器、光纤式光电传感器、色彩传感器、CCD和CMOS图像传感器等。
5.光敏传感器连接示意图



LSI是光敏二极管,R58为其提供反向电压,当环境光线变化时,LSI两端电压也会随之变化,从而通过ADC3_IN5通道,读取LIGHT_SENSOR(PF7)上电压,即可得到环境光线强度,光线越强,电压越低,光线越暗,电压越高。【光线强时,二极管漏电流大大增加,R58两端压降增加,则LSI对地电压减小,故所测电压值变小
6.开发指南对采集到的电压进行了量化,处理成0~100的光强值,这个过程是如何实现的呢?
[mw_shl_code=c,true]//读取Light Sens的值 //0~100:0,最暗;100,最亮 u8 Lsens_Get_Val(void) { u32 temp_val=0; u8 t; for(t=0;t<LSENS_READ_TIMES;t++) { temp_val+=Get_Adc3(LSENS_ADC_CHX); //读取ADC值 delay_ms(5); } temp_val/=LSENS_READ_TIMES;//得到平均值 if(temp_val>4000)temp_val=4000; return (u8)(100-(temp_val/40)); }[/mw_shl_code]

这个量化过程应该是一个自定义的、便于一般处理的过程。
电压采集值范围【0,4095】,为便于处理,将其范围界定到【0, 4000】,将光线强度设定为【0, 100】,采集值与光线强度值比例为40:1。当光线越强时,采集到的数值越小,反应在x为采集值/40,y为光线强度的坐标上,是一条斜率为-1的直线,因而我们可以以最亮时即100作为被减数,采集值作为减数,差值显示在屏幕上,体现光亮程度。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-12 23:20:51 | 显示全部楼层
回复【151楼】正点原子:
---------------------------------
字数不够,粘代码凑,嘿嘿
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-13 23:21:57 | 显示全部楼层
第二三天  2015年08月13日  周四     例程:DAC实验


1.STM32F4的DAC模块(数字/模拟转换模块)是12位数字输入,电压型的DAC。共有2个输出通道,每个都有单独的转换器。

2.从main函数代码可以看出,按键设置输出电压的时候,每次都是以0.161递增或递减的,这个过程如下





首先每次WKUP_PRESS按键按下,写入寄存器递增或递减200,然后显示到屏幕的电压值也就是temp则是通过读取上述寄存器得到的,有以上公式
变化量=200*3.3/4096=0.161V。



昨晚临睡前,看到微信朋友圈的一个小游戏:按下按键,待你感觉到了1s松开,看你能够多接近1.000s,玩了几把,虽不是特别有趣,但还是有点意思,今天想着移植到探索者。

下班以后,稍微测试了一下DAC实验就开始鼓捣,
现在十一点多了,除了吃饭时间,估计耗时3个小时左右,只完成一部分,希望明天能够完成上传。

如果哪位朋友有时间,可以试试,主要需要按键、定时器、TFTLCD功能,计划在微信游戏1s基础上设置为3个模式:1s、1min、5min,根据接近程度自动显示用时并打分。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-14 00:03:40 | 显示全部楼层
回复【156楼】正点原子:
---------------------------------
确实

看到朋友炫出来1.001s,想着也试试,结果......
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

18

主题

65

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2015-8-13
在线时间
84 小时
发表于 2015-8-14 09:43:33 | 显示全部楼层
顶顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-14 22:32:31 | 显示全部楼层
回复【158楼】Elric_QZH:
---------------------------------
多看了两眼,顶 字不会写了...
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-14 23:01:43 | 显示全部楼层
第二四天 2015年08月14日  周五     例程:PWM DAC实验



1.PWM+RC滤波实现一个PWM DAC,原理图如下



2.话说本文公式略头大,目前还不会应用到,也就不深入学习了。

3.实验连接配置:因为PWM DAC和USART2_RX共用了PA3引脚,需拔掉P9上PA3(RX)的跳线帽(右侧),否则结果偏差加大;还需用跳线帽短接开发板右下角的多功能端口PDC和ADC。



MGame01-----Sense Of Time
微游(Micro Game),基于此游戏之小,连小游戏都算不上,故得此名。

游戏名称:时间感知测试(Sense Of Time,也是自己瞎起的名字,感觉档次还可以)。

游戏玩法:就是按下按键并保持,直到你觉得按下时间达到预期1s、1min或5min(三种模式任选其一)的时长松开,屏幕会显示你按下时长即得分,源于微信朋友圈的1s游戏,此处进行了部分扩展。

游戏版本:MGame01_V1.3,实现了1s、1min、5min模式功能,并进行了少于10次的1s、1min实验测试,符合预期。

实验平台:基于STM32F4 Explore开发板


改进空间:由于没有时间及动力继续完善,暂时到此结束,如有哪位坛友有建议或意见欢迎交流,共同进步。程序比较明显的可以改进的地方有,①按键使用的是普通模式而非触发中断,灵敏度及准确度有较大提升空间;②程序仿照原子老大自定义寄存器进行了部分处理,因为根据需要随意定义,可进一步整理使其规整;③程序中唯一结构体也是定义比较杂乱,可进一步规整;④尚未玩过GUI及触屏,如果进行添加,界面美观一些,还是有一定可玩性。

MGame01_V1.3.rar

1.78 MB, 下载次数: 882

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

使用道具 举报

8

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
210
金钱
210
注册时间
2014-9-29
在线时间
13 小时
发表于 2015-8-14 23:15:15 | 显示全部楼层
回复【160楼】龙之谷:
---------------------------------
玩不成么,啥游戏
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-15 00:03:23 | 显示全部楼层
 回复【161楼】 lblly :
---------------------------------
直接下载到探索者,控制key0、key1就可以了啊,key1控制按键按下模式1s、1min、5min。按下key0保持一段时间,待你感觉按下时间等于1s、1min或5min松开,根据按下时间与模式的接近程度会自动计算得分
不明白你说的  玩不成  是什么意思
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

8

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
210
金钱
210
注册时间
2014-9-29
在线时间
13 小时
发表于 2015-8-15 20:17:24 | 显示全部楼层



厉害吧,请叫我神算子
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-15 20:53:22 | 显示全部楼层
回复【163楼】lblly:
---------------------------------
你这个,我擦,我费劲鼓捣好几个小时,你直接给通关了

你要是能把5min模式通关了,请你吃雪糕......
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-15 23:27:15 | 显示全部楼层
第二五天  2015年08月15日  周六     例程:DMA实验(一)

1.DMA,Direct Memory Access即直接存储器访问。
2.DMA传输方式无需CPU直接控制,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与IO设备开辟一条直接传送数据的通路。
3.STM32F4共2个DMA控制器,16个数据流(DMA1、DMA2各8个),每一个DMA控制器都用于管理一个或多个外设的存储器访问请求每个数据流总共可以有多达8个通道(或称请求)。每个数据流通道都有一个仲裁器,用于处理DMA请求间的优先级。
4.DMA控制器执行直接存储器传输,因为采用AHB主总线,可以控制AHB总线矩阵来启动AHB事务。可以执行事务:外设到存储器的传输、存储器到外设的传输、存储器到存储器的传输(仅DMA2可以)。
5.配置步骤:
其一,使能DMA时钟,并等待数据流可配置
其二,设置外设地址
其三,设置存储器地址
其四,设置传输数据量
其五,设置DMA数据流X配置信息
其六,使能DMA数据流X,启动传输
6.相关寄存器:
其一,DMA中断状态寄存器,共有2个MA_LISR和DMA_HISR,每个寄存器管理4个数据流
其二,DMA中断标志清除寄存器,共有2个:DMA_LIFCR和DMA_HIFCR,用来清除中断状态寄存器对应位,通过写1清除
其三,DMA数据流X配置寄存器(DMA_SxCR)(x=0~7),【MDK中DMAx_SxCR对应DMAx_Streamx->CR】,该寄存器控制DMA很多相关信息,包括数据宽度、外设及存储器宽度、优先级、增量模式、传输方向、中断允许、使能等配置,是核心控制寄存器
其四,DMA数据流x数据项数寄存器DMA_SxNDTR,控制DMA数据流x的传输数据量,范围0~65535
其五,DMA数据流x外设地址寄存器DMA_SxPAR,用来存储外设地址,如串口1发送则写入&USART1_DR
其六,DMA数据流x的存储器地址寄存器DMA_SxMOAR和DMA_SxM1AR(仅双缓冲模式有效)。用来存放存储器地址,例如使用SendBuf【8200】数组来做存储器,则写入SendBuf即可
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-16 23:44:08 | 显示全部楼层
第二六天  2015年08月16日  周日     例程:DMA实验(二)

一、DMA的两个函数
1.void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u8 chx,u32 par,u32 mar,u16 ndtr);
//DMAx的各通道配置
//从存储器->外设模式/8位数据宽度/存储器增量模式
//DMA_StreamxMA数据流,DMA1_Stream0~7/DMA2_Stream0~7
//chxMA通道选择,范围:0~7
//par:外设地址
//mar:存储器地址
//ndtr:数据传输量  

2.void MYDMA_Enable(DMA_Stream_TypeDef *DMA_Streamx,u16 ndtr);
//开启一次DMA传输
//DMA_StreamxMA数据流,DMA1_Stream0~7/DMA2_Stream0~7 
//ndtr:数据传输量  

二、当我们在主函数(通过按键等触发)开启一次DMA后,就可以进行其它工作而无需再对其进行处理,我们还可能与其有关的操作仅仅是传输完成后将其标志位清零,便于下次DMA的使用以及传输的数据的相关处理。

三、程序中有一段代码比较有意思,在此品味一下(例中  const u8 TEXT_TO_SEND[]={"ALIENTEK Explorer STM32F4 DMA 串口实验"};  )
[mw_shl_code=c,true]j=sizeof(TEXT_TO_SEND); //注意例中此处j=41,因为有‘\0’结束符 for(i=0;i<SEND_BUF_SIZE;i++)//将数组TEXT_TO_SEND添加换行符后填充SendBuf发送数组 { if(t>=j)//每次复制完一次数组后添加一个换行符 { if(mask) { SendBuff=0x0a; t=0; }else { SendBuff=0x0d; mask++; } }else//复制TEXT_TO_SEND语句 { mask=0; SendBuff=TEXT_TO_SEND[t]; t++; } } [/mw_shl_code]

前面定义了#define SEND_BUF_SIZE 8200 //发送数据长度,最好等于sizeof(TEXT_TO_SEND)+2的整数倍.
因为每次发送数组都会在原基础上添加0x0d、0x0a,所以发送数据长度最好等于(数组长度+2)的整数倍,否则发送的最后一次数组是不完整的。

写到这以后突然发现好像mask这个标志量没什么意义了,去掉也不影响赋值。当然这是在结尾只是简单的添加换行符可以简化,如果需要根据标志位进行处理、规律性没这么强的时候,mask就会显示用途了
[mw_shl_code=c,true]        j = sizeof(TEXT_TO_SEND); for(i=0; i<SEND_BUF_SIZE; i++) { if(t >= j) { SendBuff = 0x0d; i++; SendBuff = 0x0a; t = 0; } else { SendBuff = TEXT_TO_SEND[t]; t++; } }[/mw_shl_code]

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-17 00:07:30 | 显示全部楼层
关于某些事情,无言以对,各人自扫门前雪,以后多看娱乐新闻就好了,有些东西看多了恶心

等了一周的极限停播一周,停就停吧,此时这样做无可厚非,只是有卵用

关于松鼠迅,太给咱男人掉分,做人不能太过分,这么踩贤惠的前妻的渣也是少见,刚红就要被按下去了,本来还比较支持他,垃圾东西
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-17 00:21:32 | 显示全部楼层
手头工作做一半,马上考科目二,考试项目练得心里没底,告假练车,唉,报名有点后悔,何必在此时去报名,搞得晕头转向,但回头一想现在不练,可能以后更忙,算了,事情不能想太多

以前看过一篇鸡汤:一件事情坚持21天就会变成习惯,呵呵啦

事情开始的前几天,一般都会进展顺利,因为新鲜所以坚持起来难度不大,坚持十几天就开始有放弃的念头了,坚持21天,我只能说我个人感觉并没有成为习惯,反而开始怀疑继续坚持的意义,自己还有很多事情要去做,模电知识薄弱需要大补,上位机想学C#一直没有开始进行,工作还有很多需要熟悉,我却每天平均话费超过两个小时一步一步做实验,急躁-----坚持的最大敌人

而再反思一下自己,如果我不坚持做实验,每天做实验的时间会用来做什么?呵呵,三国杀、电影、综艺等等,这么一想,原来我占用的是平常玩的时间,也就可以给自己一些坚持的理由了

现在坚持做实验,可能会有一些苦恼,但是会节省以后反复无序做实验所浪费的时间,今天如果放弃,以后可能还是会有从头开始一步步做实验的念头,并且会为今天的放弃而后悔,因为今天的我确实后悔以前的多次不坚持

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-17 00:23:46 | 显示全部楼层
呵呵呵呵呵呵呵呵呵呵呵

刷一层,把不良情绪刷掉

做一事想一事,不要去想太多-----自己谨记
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-17 00:26:42 | 显示全部楼层
回复【166楼】正点原子:
---------------------------------
俺竟没言以对
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-17 23:19:40 | 显示全部楼层
第二七天  2015年08月17日  周一     例程:IIC实验

一、基础知识

1.IIC(Inter-Intergrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。

2.IIC总线由数据线SDA和时钟SCL构成的串行总线,可发送和接受数据,在CPU与被控IC之间、IC与IC之间进行双向传送。

3.高速IIC总线一般可达400Kbps以上。

4.IIC总线在传送数据过程中共有三种类型信号:开始信号【必需】、结束信号、应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU收到应答信号后,根据实际情况做出是否继续传递信号的判断,若未收到应答信号,判断为受控单元出现故障。

5.AT24CXX系列对应可寻址范围:【0, XX*1024/8-1】Byte。

二、AT24CXX芯片地址控制字

1.地址控制字-----1  0  1  0  A2  A1  A0  R/W
注1:以上控制字中A2/A1/A0顺序以使用芯片数据手册为准
注2:A2/A1/A0用于多个芯片并接使用时的地址区分,可并接数量由此三位是否有效决定,如A1/A0有效,而A2位固定为0,则最多并接4片IIC器件
在对AT24CXX开始操作前,需要先发送一个8位地址字来选择芯片进行读写,R/W位用于读写操作位,为1时表示读操作,为0时表示写操作。

2.写操作分为写字节和写页两种方式
写字节,通常向AT24CXX发送设备地址字并接到应答信号后,还需要发送1/2个8位地址来选择要写数据的地址,AT24CXX接收到地址后会应答一个零信号,然后接收8位数据进来,并再返回一个零应答信号
写页方式,一次性写入一页,与写字节不同的是,当写入一个数据字节后,单片机不发送停止状态,而是在应答信号后接着输入127个字节,每个字节接收完毕后,AT24CXX照样输出一个零应答信号。

3.读操作分为地址读、随机读、读串三种方式
其初始化过程与写操作基本相同,只是在设备选择字中的最低位改为读而已。
当前地址读操作方式时,内部数据地址将保持在读写操作地址加1上,直到读到最后字节后回到最开始位置。
随机读操作之前先要向其写入一个字节地址,然后才可以读。
读串操作既可以时当前地址读,也可以是随机地址读,当单片机接收到一个数据字后,会回应一个应答信号,AT24CXX在接收到应答信号后会将地址加1,接着输出下一个字节,当单片机接收到数据但不送应答信号时,读过程结束。

三、多片(同一容量)AT24CXX统一管理(开发指南例程基础上修改,以下程序未实际测试验证)

1.由上知,单片AT24CXX可写字节VOL = XX*1024/8;则N片(允许情况下)可写字节,及可寻址addr范围为【0, N*VOL-1】

2.则向N片AT24CXX中可写入地址写入一个字节
[mw_shl_code=c,true]//在AT24CXX多片级联有效地址范围写入一个数据 //WriteAddr :写入数据的目的地址 //DataToWrite:要写入的数据 void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite) { IIC_Start(); if(EE_TYPE>AT24C16) { IIC_Send_Byte(0XA0+(WriteAddr/VOL)*2); //发送写命令 IIC_Wait_Ack(); IIC_Send_Byte((WriteAddr%VOL)>>8);//发送高地址 }else IIC_Send_Byte(0XA0+((WriteAddr/VOL)<<1)); //发送器件地址,写数据 IIC_Wait_Ack(); IIC_Send_Byte((WriteAddr%VOL)%256); //发送低地址 IIC_Wait_Ack(); IIC_Send_Byte(DataToWrite); //发送字节 IIC_Wait_Ack(); IIC_Stop();//产生一个停止条件 delay_ms(10); }[/mw_shl_code]
则从N片AT24CXX中可读出地址读出一个字节
[mw_shl_code=c,true]//从AT24CXX有效地址范围读出一个数据 //ReadAddr:开始读数的地址 //返回值 :读到的数据 u8 AT24CXX_ReadOneByte(u16 ReadAddr) { u8 temp=0; IIC_Start(); if(EE_TYPE>AT24C16) { IIC_Send_Byte(0XA0+(ReadAddr/VOL)*2); //发送写命令 IIC_Wait_Ack(); IIC_Send_Byte((ReadAddr%VOL)>>8);//发送高地址 }else IIC_Send_Byte(0XA0+((ReadAddr/VOL)<<1)); //发送器件地址,写数据 IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr%VOL%256); //发送低地址 IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(0XA1+ReadAddr%VOL); //进入接收模式 IIC_Wait_Ack(); temp=IIC_Read_Byte(0); IIC_Stop();//产生一个停止条件 return temp; }[/mw_shl_code]

3.通过以上处理,以后在使用多片AT24CXX器件时,只要宏定义一下VOL,配合正确的硬件电路连接,即可将多片看作一片进行统一管理。


四、相关链接/附件来源
【1】http://www.openedv.com/posts/list/56260.htm(坛友 济世良驹  对IIC时序整理分析很清晰,故将其原文档添加为附件用以备份)
【2】http://www.openedv.com/posts/list/10513.htm
【3】http://www.openedv.com/posts/list/28435.htm
【4】http://www.openedv.com/posts/list/23939.htm

IIC总结.pdf

327.29 KB, 下载次数: 917

如何对AT24C02编写驱动程序——IIC总线协议.ppt

368 KB, 下载次数: 831

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-17 23:39:27 | 显示全部楼层
回复【175楼】正点原子:
---------------------------------
前期只能这样了,勉强够量,没什么质,希望后期能有些许提升

这点努力和原子老大相比简直不到九牛一毛,我也是矫情
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

19

主题

217

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-4-1
在线时间
34 小时
发表于 2015-8-18 08:23:51 | 显示全部楼层
楼主加油啊。
一直在路上,一直在成长。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-18 22:58:03 | 显示全部楼层
回复【177楼】济世良驹:
---------------------------------
来串门了,哈哈

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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


第二八天  2015年08月18日  周二     例程:SPI实验(一)

一、SPI基础知识
1.SPI(Serial Peripheral interface),就是串行外围设备接口。主要应用于EEPROM、FLASH、实时时钟、AD转换器以及数字信号处理器和数字信号解码器之间。是一种高速的、全双工、同步的通信总线,在芯片管脚上只占用四根线。
2.SPI接口一般使用4条线进行通信:
        MISO--主设备数据输入,从设备数据输出
        MOSI--主设备数据输出,从设备数据输入
        SCLK--时钟信号,由主设备产生
        CS--从设备片选信号,由主设备控制
3.SPI主要特点:可以同时发出和接收串行数据,可以当做主机或从机工作,提供频率可编程时钟,发送结束中断标志,写冲突保护,总线竞争等。
4.时钟极性(CPOL),=1串行同步时钟的空闲状态为高电平;=0串行同步时钟的空闲状态为低电平
5.时钟相位(CPHA),=1串行同步时钟的第一个跳变沿(上升或下降)采样数据;=0串行同步时钟的第二个跳变沿(上升或下降)采样数据。
6.STM32F4的SPI时钟最高为37.5Mhz,支持DMA。

二、W25Q128基础知识

1.W25Q128是华邦公司推出的大容量SPI FLASH产品,容量为128Mb,即16MByte。
2.W25Q128将16MByte的容量分为256块(block,64K字节),每块又分为16个扇区(sector,4K字节)。最小擦除单位为一个扇区,即4K字节。
3.因为W25Q128最小擦除4K字节,因此需要给其开辟一个至少4K的缓存区,故要求芯片必须由4K以上SRAM才便于操作。
4.W25Q128擦鞋周期多达10W次,具有20年的保存期限,支持电压2.7~3.6V。

三、硬件连接图

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-18 23:35:25 | 显示全部楼层
回复【181楼】正点原子:
---------------------------------
秒顶,刚发出来重新编辑一下时你已经回复了,好手速

为了庆祝原子老大STM32F4 Explorer大量精华配套视频强势推出,今天偷懒多玩了会游戏,先放松一下,等下载完成后好好学习,向老大致敬!!!!!
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

19

主题

217

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-4-1
在线时间
34 小时
发表于 2015-8-19 08:54:38 | 显示全部楼层
回复【182楼】龙之谷:
---------------------------------
你学的F4啊,我一直搞F103的,准备搞个四轴玩玩
一直在路上,一直在成长。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2015-8-19 10:45:24 | 显示全部楼层
楼主威武,楼主学习能力很强。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-19 23:38:03 | 显示全部楼层
第二九天  2015年08月19日  周三     例程:SPI实验(二)

1.STM32F4开发指南--寄存器版本_V1.1主函数中关于FLASH_SIZE的计算应该是存在错误,书中使用W25Q128,定义FLASH_SIZE=128*1024*1024;应改为FLASH_SIZE=16*1024*1024即16MByte寻址空间。查找了战舰开发板连载,使用的是W25Q64,定义FLASH_SIZE=8*1024*1024是正确的,也从侧面证明开发指南中此处有误。

2.关于以上错误,可以通过另一种方法去测试,将实验中写入FLASH_SIZE-100的数据写入128*1024*1024-100,而使用16*1024*1024-100来读,则可以正常读出,比对发现数据一致,也就是说如果所写入数据超过可寻址范围,程序将其转化到了寻址范围进行写入,而如果我们加入条件判断,即大于可寻址范围即退出,则可避免错误寻址的数据写入。

3.SPI读写函数
[mw_shl_code=c,true]u8 SPI1_ReadWriteByte(u8 TxData) { while((SPI1->SR & 1 << 1) == 0); //等待发送区空 SPI1->DR = TxData; //发送一个字节 while((SPI1->SR & 1 << 0) == 0); // 等待接收完成一个字节 return SPI1->DR; //返回接收到的数据 }[/mw_shl_code]

一直不是很明白为什么读写函数放在一块,并且读写过程都一样都需要发送接收,直到看到SPI双机通信的酷贴才找到原因,应该是:SPI是全双工的,但通信协议一般是半双工的,因为从机不能主动发送数据;主机会控制通信的时钟,从机不能产生时钟,从机在主机发送数据的时钟上发送数据。

4.写入SPI FLASH函数详细注解
[mw_shl_code=c,true]/********************************************************************* 功能 :写SPI FLASH,在指定地址开始写入指定长度的数据,带擦除操作! //pBuffer:数据存储区 //WriteAddr:开始写入的地址(24bit) //NumByteToWrite:要写入的字节数(最大65535) ********************************************************************************************/ u8 W25QXX_BUFFER[4096]; void W25QXX_Write(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite) { u8 * W25QXX_BUF; u16 i, secoff, secremain; u32 secpos; W25QXX_BUF = W25QXX_BUFFER; secpos = WriteAddr / 4096; //扇区地址 secoff = WriteAddr % 4096; //扇区内偏移量 secremain = 4096 - secoff; //可供数据存储剩余空间大小 if(NumByteToWrite <= secremain) //要写入的数据量在同一sector,可以统一一次性处理 { secremain = NumByteToWrite; } //以下对写入数据进行处理,如果数据在一个扇区写完则结束,如果超过则将其进行分割,每份不超过一个扇区容纳量,依次写入,直到写完为止 while(1) { W25QXX_Read(W25QXX_BUF, secpos*4096, 4096); //读出所在扇区所有数据放在缓冲池 for(i=0; i<secremain; i++) //判断是否需要进行擦除处理 { if(W25QXX_BUF[secoff+1] != 0xff) //所要写入区域有不为0xff字节,停止检查,直接对扇区进行擦除,即写入0xff,此时i < secremain { break; } } if(i < secremain) //写入区域有数据非oxff数据字节,需要进行擦除处理 { W25QXX_Erase_Sector(secpos); //将需要写入扇区且要写入区域存在非0XFF字节的扇区全部擦除 for(i=0; i<secremain; i++) //将要写入数据放入到缓冲池对应要写入扇区相应位置,缓冲池与扇区一一对应 { W25QXX_BUF[i+secoff] = pBuffer; //写入地址前的数据不做处理,当写入时保证了无关写入区域数据完整性 } W25QXX_Write_NoCheck(W25QXX_BUF, secpos*4096, 4096); //将缓冲池中的数据一一对应写入扇区,写入区域前的数据进行了恢复 } else //无需进行擦除处理 { W25QXX_Write_NoCheck(pBuffer, WriteAddr, secremain); //写入区域数据均为0xff,无需对sector进行擦除,直接写即可 } //对写入数据进行判断,看其是否写完,写完退出,否则更新相关量后再次从while(1)处开始执行 if(NumByteToWrite == secremain) //如果写入数据正好在同一sector写完则处理完毕 { break; } else //如果还有剩余数据没有写完 { secpos++; //进入下一sector继续存放剩余数据 secoff = 0; //从下一扇区起始位置开始写入 pBuffer += secremain; //更新数据,要写入的数据地址偏移已写入数据量作为继续写入新地址 WriteAddr += secremain; //更新数据,存储芯片写入地址更新 NumByteToWrite -= secremain; //更新数据,要写入数据减去已写入字节数量作为继续写入新数量 if(NumByteToWrite > 4096) //剩余数据超过一个sector,按照一个sector进行写,重走以上过程 { secremain = 4096; } else //剩余数据小于一个sector,根据实际大小进行写,重走以上过程 { secremain = NumByteToWrite; } } } }[/mw_shl_code]

开发指南原文:先获得首地址(WriteAddr)所在扇区,并计算在扇区内的偏移,然后判断要写入的数据长度是否超过本扇区所剩下的长度,如果不超过,再先看看是否要擦除,如果不要,则直接写入数据即可,如果要则读出整个扇区,在偏移处开始写入指定长度的数据,然后擦除这个扇区,再一次性写入。当所需要写入的数据长度超过一个扇区的长度时,先按照前面的步骤把扇区剩余部分写完,再在新扇区内执行同样操作,如此循环,直到写入结束。

5.参考/相关链接
【1】http://www.openedv.com/posts/list/13103.htm
【2】http://www.openedv.com/posts/list/0/18467.htm


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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-19 23:42:43 | 显示全部楼层
回复【183楼】济世良驹:
---------------------------------
四轴感觉挺高大上的,有时间的话很值得去玩玩,工作以后的我只能干羡慕你们了

期待你更多好帖子分享...
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-19 23:44:40 | 显示全部楼层
回复【184楼】正点原子:
---------------------------------
嘿嘿,机智如原子老大也有无言以对之时...
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-19 23:46:35 | 显示全部楼层
回复【185楼】Admin:
---------------------------------
谢谢夸奖,谢谢捧场,哈哈
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-19 23:54:58 | 显示全部楼层
今天科目二,第二次机会的时候通过,完成项目后到达坡顶提示通过考试的一瞬间竟然脑袋一片空白,呵呵,估计太紧张了

考试给两次机会,第一次倒库、侧方、曲线、直角都通过,在自己最薄弱的坡起竟然找错标志,直接进入第二次机会,全身那个汗,好在坡起还算给力,通过了,这次考试实力占70分,运气占30分,以前从来没有中过彩票、捡过钞票,感觉自己和幸运没啥交集,今天真算是有些幸运

坚持追求,必有收获!!!加油啦...
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-20 22:46:09 | 显示全部楼层
第三十天  2015年08月20日  周四     例程:485实验



1.485(一般称作RS485/EIA-485),电气特性规定为2线、半双工、多点通信。
RS485仅仅规定了接收端和发送端的电气特性,没有规定或推荐任何数据协议。逻辑“0”以两线间电压差值-(2~6)V表示,逻辑“1”以两线间电压差值(2~6)V表示,该电平与TTL电平兼容。

2.传输速率较高,10m时,最高传输速率可达35Mbps;1200m时,可达100Kbps。

3.485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力强,即抗噪声干扰性好。

4.一般最大支持32个节点,使用特制485芯片,可以达到128或256个节点,最大可以支持到400个节点。485推荐使用点对点网络、线型、总线型,不可是星型、环型网络。

5.理想情况RS485需要2个终端匹配电阻,阻值等于传输电路的特性阻抗(一般为120欧)。如果没有特性阻抗,当所有设备都静止或没有能量时就会产生噪声,而且线移需要两端的电压差,未接终端电阻会使较快速的发送端产生多个数据信号边缘,导致传输错误。一般在总线的起止端加匹配电阻。

6.经典处理程序
[mw_shl_code=c,true]/********************************************************************* 功能 :接收函数 //buf:接收缓存首地址 //len:读到的数据长度 ********************************************************************************************/ void RS485_Receive_Data(u8 *buf, u8 *len) { u8 i; u8 rxlen = RS485_RX_CNT; *len = 0; delay_ms(10); if(rxlen == RS485_RX_CNT && rxlen) { for(i=0; i<rxlen; i++) { buf = RS485_RX_BUF; } *len = RS485_RX_CNT; RS485_RX_CNT = 0; } }[/mw_shl_code]
指针作为函数参数,在函数中对指针指向变量进行更新,可方便地实现一个函数多个“返回值”,且使整体函数定义格式统一,方便管理。



1.波特率是数据信号对载波的调制速率,用单位时间(s)内载波调制状态改变次数来表示,单位Baud。我们一般接触到的串口波特率就是每秒传输的字节数。

2.比特率是数字信号的传输速率,用单位时间传输的二进制代码的有效位(bit)来表示,单位bit/s(bps)、Kbit/s(Kbps)等。

3.比特率 = 波特率 X 单个调制状态对应的二进制数。

4.如何理解波特率定义中的调制?平常的信号,由于频率、带宽以及易受干扰等原因,不适合直接用天线发射,所以使用一个高频信号作为载波,把需要传输的信号混入载波中,通过天线发射,在接收端再通过解调电路,筛选除所需频率信号,再滤除干扰信号,还原出所需信号,即调制。因而,波特率可以简单理解为单位时间被传输(处理)的数据信号量。

5.STM32波特率计算公式






相关/参考链接:
【1】http://wenda.haosou.com/q/1381576629065902?src=130
【2】http://wenda.haosou.com/q/1372811926068832?src=150
【3】http://baike.haosou.com/doc/5946351-6159287.html
【4】http://www.openedv.com/posts/list/28425.htm
【5】http://zhidao.baidu.com/link?url=rXy5b7w4VN33M7KwWm3aEDppxvL1Fsb8hyif99BZcc-L4J91gQEwcU9B-Q1BV4z8w5oSj0cZJDARftILtVaoK2C8KUKXIcPramqJeGaHb_y
【6】http://bbs.21ic.com/icview-41930-1-1.html
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-7-17
在线时间
0 小时
发表于 2015-8-21 08:10:25 | 显示全部楼层
加油哦,看好你
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2015-8-21
在线时间
0 小时
发表于 2015-8-21 09:57:40 | 显示全部楼层
长期潜水党特意注册账号来顶楼主!
看了楼主的文章非常感动,不仅让我收获了很多知识,还让我学习了楼主做人做事做学问一丝不苟的态度和精神!每一天的文章不仅仅是一篇篇介绍知识的优秀教程,更是一篇篇积极向上的励志文章。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-21 19:24:29 | 显示全部楼层
回复【192楼】执子之手SKY:
---------------------------------
谢谢支持,共同进步,哈哈...
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-21 19:30:22 | 显示全部楼层
回复【193楼】neary:
---------------------------------
谬赞了。

谢谢你的支持,你的鼓励增加了我继续努力的动力。

经常在论坛发帖、回帖帮助别人有意义的问题也会不知不觉提升自己的能力,嘿嘿。

再次感谢你的支持与鼓励。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-21 19:34:30 | 显示全部楼层
【注】190楼  第三十天  今日修改
修改时间:2015年08月21日 19:39:43
修改内容:添加了最后第五、六两条关于波特率、比特率的链接,能对理解相关知识提供一些帮助。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-21 23:43:39 | 显示全部楼层
第三一天  2015年08月21日  周五     例程:CAN实验

1.CAN(Controller Area Network),是ISO国际标准化的串行通信协议。

2.CAN总线电平根据两根线上电位差来判断,分为显性电平和隐性电平,发送方通过使总线电平发生变化,将消息发送给接收方。物理特性图可以看出,显性电平对应逻辑“0”,CAN_H和CAN_L之差为2.5V左右,隐性电平对应逻辑“1”,CAN_H和CAN_L之差为0V,且显性电平具有优先权,只要有一个单元输出显性电平,则总线即为显性电平。另,在CAN起止端都有一个120欧的终端电阻作为阻抗匹配,减少回波反射。



3.通信速度快、距离远,最高1Mbps(距离小于40m
),速率低于5Kbps时最远可达10Km。

4.CAN总线可同时连接多个单元的总线,可连接的单元总数理论上没有限制,但实际会受总线上时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加,提高通信速度,则可连接的单元数减少。

5.多主控制,在总线空闲时,所有单元都可以发送消息,而两个以上的单元同时发送消息使,根据标识符(Identifier,ID)决定优先级,ID并非表示发送的目的地址,而是表示访问总线的消息的优先级。

6.CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率125kbps以下的低速通信标准。我们使用的是500kbps的通信速率。

7.数据帧和遥控帧有标准格式(11位标识符ID)和扩展格式(29位标识符ID)。各种帧用途如图



【注】对CAN比较陌生,内容较多,由于此后实验及工作暂时不需要,故只是了解一下,以后若有时间有机会再更进一步学习。

can_2.0b_协议.pdf

375.76 KB, 下载次数: 852

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-8-22 23:07:01 | 显示全部楼层
第三二天  2015年08月22日  周六     例程:触摸屏实验(一)

1.最常用的触摸屏有两种:电阻式触摸屏、电容式触摸屏。

2.电阻式触摸屏利用压力感应进行触点检测控制,需要直接压力接触,通过检测电阻来定位触摸位置。购买开发板配套2.4/2.8/3.5寸TFTLCD模块自带触摸屏都属此类。基本原理如下



触摸屏都需要一个AD转换器,一般来说是需要一个控制器,常用且兼容控制芯片如ADS7843、ADS7846、TSC2046、XPT2046、AK4182等,以XPT2046为例,特点如下



3.电容式触摸屏利用人体感应进行触点检测控制,不需要直接接触或只需要轻微接触,通过检测感应电流来定位触摸坐标。广泛应用于手机、平板电脑等设备。分为表面式电容触摸屏和投射式电容触摸屏。
    3.1.表面式电容触摸屏技术就是利用ITO(铟锡氧化物,一种透明导电材料)导电膜,通过电场感应方式感测屏幕表面的触摸行为,具有一定局限性,只能识别一个手指或一次触摸
    3.2.投射式电容触摸屏技术是传感器利用触摸屏电极发射静电场线。用于此技术的电容有两种类型:自我电容和交互电容。
        3.2.1.自我电容原理如下


        3.2.2.交互电容原理如下


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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 11:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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