4302|8

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

更新IV:FirmwareLib在EK_STM32F上的学习体会(I2C/IWDG) [复制链接]


继续,上一贴是:

更新III:Firmware Lib在EK_STM32F上的学习体会(FLASH/GPIO)

再早的几个帖子链接可以在上一贴内找,就不一个一个列出来了,等全系列结束了来个总集。

-----------------------I2C分隔线-----------------------------------

Exemple 1

本例展示了如何利用中断把一块内存中的数据从I2C1传送到I2C2。我们使用7bit地址的配置,时钟为200KHz。

运行程序,首先打开两个I2C并授权他们的中断。在I2C1的开始状态生成以后,7bit地址模式的传送就开始。每当一个传送事项(event)发生,都会产生一个中断,根据不同的情况,在中断历程中采取不同的行动。本例中,目标是将I2C1 Tx_Buffer中的数据传送到I2C2 Rx_Buffer中去,在传送结尾,主I2C会把PER(Packet Error Checking)传送到从I2C,并存储到变量PEC_Value中。最后,通过比较I2C1 Tx_Buffer和I2C2 Rx_Buffer判断传送是否正确。


Exemple 2

本例展示了如何为I2C2设置2个不同地址的,并通过I2C1把2块不同数据发向这2个地址,显然这些数据都为I2C2所接收。

程序分为2步:
1.  I2C1向第一个从I2C地址I2C2_SLAVE1_ADDRESS7发送数据,把I2C1 Tx_Buffer1中的数据发向I2C2,I2C2接收到的数据存放在I2C2 Rx_Buffer1中。I2C2的第一个从地址I2C2_SLAVE1_ADDRESS7存放在I2C2 OAR1寄存器(I2C2 OAR1 register)中。传送完成后,检查传送是否正确。

2. I2C1向第二个从I2C地址I2C2_SLAVE2_ADDRESS7发送数据,把I2C1 Tx_Buffer2中的数据发向I2C2,I2C2接收到的数据存放在I2C2 Rx_Buffer3中。I2C2的第二个从地址I2C2_SLAVE2_ADDRESS7存放在I2C2 OAR2寄存器(I2C2 OAR2 register)中。传送完成后,检查传送是否正确。


Exemple 3

本例展示了如何使I2C工作在SMbus(System Management Bus)模式下,并把一个ARP(Address Resolution Protocol)命令从I2C1发送到I2C2。

首先,分别把I2C1和I2C2设置为SMbus Host和Device。打开2个I2C,并打开他们的PEC计算功能。打开I2C2的ARP(Address Resolution Protocol)功能。在传输步骤为:
1. I2C1进入开始状态(start condition)
2. I2C1作为master发送SMBus default header,I2C2作为slave设置旗位SMBDEFAULT作为响应。
3. I2C1把ARP命令发送到I2C2
4. 打开I2C1和I2C2的PEC传送功能,I2C2把接收到的PEC存储到变量PEC_Value。


Exemple 4

本例展示了如何应用10比特地址模式,把数据从I2C1发送到I2C2。与以上3例不同,本次I2C时钟设置为300KHz。

在I2C1的开始状态生成以后,10bit地址模式的传送就开始。程序通过检测发生在Master或者Slave的每一个传送事项(event)来掌控整个传输过程。本例中,目标是将I2C1 Tx_Buffer中的数据传送到I2C2 Rx_Buffer中去,在传送结尾,通过比较I2C1 Tx_Buffer和I2C2 Rx_Buffer判断传送是否正确。


Exemple 5

本例展示了如何利用I2C软件库和关联的I2C EEPROM驱动来实现与M24C08 EEPROM的数据交换。(在EKSTM32F板上集成的是M24C02 EEPROM,因此要对程序做一些改动。)

在对EEPROM进行写操作的时候,我们将I2C1设置为主发送端(Master transmitter),而在读操作的时候,则设置为主接收端(Master receiver)。在文件I2c_ee.c中,将EEPROM的地址定义为0xA0。传输时钟默认为400KHz,也可以在文件I2c_ee.c重新定义。另外,由于板上EEPROM为M24C02而非M24C08,因此在I2c_ee.c需把I2C_Pagesize由16改为4。对于EKSTM32F板,由于板上EEPROM的片选管脚都接地,因此在文件I2c_ee.h中只能选择定义EEPROM_Block0_ADDRESS为0xA0。

运行程序,首先,第一次读写把Tx1_Buffer中的数据写入EEPROM_WriteAddress1,再把数据从中读出存入Rx1_Buffer,比较Tx1_Buffer和Rx1_Buffer来检验读写是否正确。然后把EEPROM设为待命状态(Standby State)。再进行第二次读写把Tx2_Buffer中的数据写入EEPROM_WriteAddress2,再把数据从中读出存入Rx2_Buffer,比较Tx2_Buffer和Rx2_Buffer来检验第二次读写是否正确。最后,把2次写入的数据一起读出,存入Rx_Buffer中。

-----------------------IWDG分隔线-----------------------------------

Exemple 1

本例展示了如何利用SysTick中断定期刷新IWDG(独立看门狗)计时器。IWDG的时限定为280微秒。这个时限可能会随着LSI(内部低速时钟)的频率漂移而产生微小的变化。

我们把SysTick设置为每250毫秒产生一个中断。它在中断历程中将刷新IWDG计数器,这样就可以避免由IWDG引起的复位。另外,在中断中还将翻转IO口PC.07的状态。

EXTI Line9被连向管脚PB.09,我们把它设置为在每一个下降沿产生一个中断。(在EKSTM32F板上,我们用EXTI Line4取代EXTI Line9,因为按钮连在管脚PD.04上。)

在中断向量列表(NVIC)中,EXTI line[9:5](运行在EKSTM32F板上则为EXTI Line4)中断的优先级被置为0,而SysTick中断的优先级为1。即EXTI line[9:5]中断优先级高于SysTick中断。

我们用EXTI line[9:5]中断来模拟一个软件错误,中断中,我们关闭与PC.07相连的LED,但并不把EXTI line9 pending比特清除。这样系统不会从中断中返回,而由于SysTick中断优先级较低,也不能打断它。当IWDG(独立看门狗)计时器为零时发生IWDG复位。一旦程序从这个复位中恢复,系统将点亮与PC.06相连的LED,提示发生过IWDG复位。

在本例中,系统时钟由外部高速晶振(HSE 8MHz)提供。


下载:
相关链接:https://bbs.eeworld.com.cn/upfiles/img/20082/20082241778608.rar
此帖出自stm32/stm8论坛

最新回复

                                  谢谢啊! 先看下   详情 回复 发表于 2008-5-20 17:03
点赞 关注
 

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

ssss

                                 还是无法下载啊!
此帖出自stm32/stm8论坛
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 

楼主的 文件怎么都下不下来啊

                                 楼主的 文件怎么都下不下来啊
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 

回4楼:请下载我在3楼的综合版

                                 上个月二姨的服务器出了问题,2@1IC上载的附件都丢了,我已经把这些例子整理到一起放到EDN上了。

此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 

谢谢ls

                                 谢谢ls
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

7
 

楼主,能发几个例子给我吗

楼主,能发几个例子给我吗?
这是我邮箱 :wwwwwwww11001100@163.com
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 

你可以从3楼提供的地址下载

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 

看看

                                  谢谢啊! 先看下
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表