打印

更新II:Firmware Lib在EK_STM32F上的学习体会(DMA/EXTI)

[复制链接]
3043|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
barboon|  楼主 | 2008-2-14 13:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

接着以前的2个帖子继续更新:

通过Firmware Lib在EK_STM32F上的学习体会

更新:Firmware Lib在EK_STM32F上的学习体会(CAN/Cortex/Debug)

-----------------------DMA分隔线-----------------------------------

DMA exemple 1:

本例展示了如何使用DMA把数据从FLASH传送到RAM。

运行程序,本例使用DMA通道6(DMA Channel6)作为传输管道。把一块大小为32个字(32-word)缓存,从FLASH中转移到位于RAM的目标区去。传输由软件触发。在程序中激活DMA通道6的memory-to-memory功能。一旦传输完成,DMA将产生一个中断。中断程序将读取DMA中待传输数据的数目(等于0)并清除中断旗位。同时程序将比较源数据和目标数据,检查传输是否正确。

DMA exemple 2:

本例展示了如何利用2个DMA通道来实现把一块数据缓存从内存中通过I2C1传送到I2C2。

本例中,I2C1作为主发送端I2C2作为从接受端,DMA通道5用来把在I2C2接收端收到的数据传送到接收缓存I2C2 Rx buffer,而DMA通道6用来把发送缓存I2C1 Tx buffer中的待发送数据传输到I2C1的数据寄存器(DR register)。

传输结束以后,可以通过比较接收缓存I2C2 Rx buffer和发送缓存I2C1 Tx buffer中的数据来判断传输正确与否。在EKSTM32F板上,我们可以通过点亮不同的LED来反映结果,正确的话,LED1(LD5)会亮起,反之则是LED2(LD4)。

另外,在硬件方面,为了运行本例,需要把I2C1 SCL pin (PB.06) 和 I2C2 SCL pin (PB.10)以及I2C1 SDA pin (PB.07)和 I2C2 SDA pin (PB.11)这2组管脚连接起来,并分别加上至少一个上拉电阻,在EKSTM32F板上,我们可以直接利用已经连接好的电阻R27和R28。

DMA exemple 3:

本例展示了如何利用4个DMA通道来实现把内存中4块数据两两通过SPI1和SPI2交换。即SPI1 Tx buffer中的数据由DMA传送至SPI1发送端发送至SPI2,再由DMA从SPI2接收端传送至SPI2 Rx buffer。SPI2 Tx buffer中的数据也由同样的方法传送到SPI1 Rx buffer。

在本例中SPI1工作在主模式(master)而SPI2工作在从模式(slave)。SPI1的NSS管脚由软件配置。DMA通道2用来把SPI1接收到的数据传送进SPI1 Rx buffer;DMA通道4用来把SPI2接收到的数据传送进SPI2 Rx buffer。相应的DMA通道3用来把SPI1 Tx buffer中的待发送数据送进SPI1发送端,DMA通道5用来把SPI2 Tx buffer中的待发送数据送进SPI2发送端。

一旦SPI1_CR2和SPI2_CR2两寄存器中的TxDMAEN 和 RxDMAEN比特被置一,传送就会开始。传送结束以后,程序会比较SPI1 Tx buffer和SPI2 Rx buffer以及SPI2 Tx buffer和SPI1 Rx buffer中的数据。如果传输正确,则在EKSTM32F板上,LED1(LD5)会亮起,反之则是LED2(LD4)。

DMA exemple 4:

本例展示了如何通过DMA来把数据从一个外设(ADC)传送到另一个外设(TIM1)。

在EKSTM32F上,调节分压器VR1可以实现一个可变0-3.3V模拟输入,通过通道10传向ADC。转化结果通过DMA 通道5传向TIM1_CCR1寄存器。而我们把TIM1的通道1(TIM1_CH1)配置为PWM输出。每次TIM1 的update EVENT都会驱动DMA做一次数据传送。

因此,通过调节VR1,我们可以观察到管脚TIM1_CH1 (PA.08)上的PWM输出占空系数(duty cycle)作相应的改变。

-----------------------EXTI分隔线-----------------------------------

EXTI exemple 1

本例展示了如何配置一条外部中断线路。

在本例中,我们把EXTI line 4作为外部中断源,对于线路上的每一个下降沿,都会产生一个中断,在中断中,我们拨动连接在PC.06上的LED的开关。即每按一次按钮KEY3,都会打开或者关闭LD3。

这个例子原本应用于STM32评估板(STM3210B-EVAL),在评估板上按钮与PB.09相连,而在EKSTM32F上,按钮Button13(Key)与PD.04相连,为了本例能在EKSTM32F上运行,我们把原来的线路9(EXTI Line9)改为线路4(EXTI Line4)。

相关打包下载:
相关链接:https://bbs.21ic.com/upfiles/img/20082/200821413716354.zip
沙发
djjyi| | 2008-2-26 09:25 | 只看该作者

请教

在模拟调试时 要产生中断是不是使PD_4口产生个下降沿 就会跳到中断程序?
我调试怎么也产生不了中断 

使用特权

评论回复
板凳
barboon|  楼主 | 2008-2-26 20:59 | 只看该作者

2楼的问题太模糊了

具体怎么回事?是我放上去的EXTI例程运行不正常吗?

使用特权

评论回复
地板
hotpower| | 2008-2-26 22:48 | 只看该作者

谢谢了~~~学习学习...

使用特权

评论回复
5
djjyi| | 2008-2-27 08:52 | 只看该作者

是这样

你发的EXTI例程里
我在用Keil uVision3的模拟器调试时不知道怎么进入中断 请指教怎么进入中断的

使用特权

评论回复
6
barboon|  楼主 | 2008-2-27 09:15 | 只看该作者

这个...

程序是在EKSTM32F学习板上测试的,
环境是IAR EWARM V4.42A,
Keil的模拟器,没有试过,看来帮不上忙.....

使用特权

评论回复
7
kelewang| | 2008-2-27 09:42 | 只看该作者

keil下仿真

5楼的可以看看keil帮助里的仿真模板部分

使用特权

评论回复
8
eliucheng| | 2008-4-28 09:35 | 只看该作者

无法下载

郁闷  barboon帮个忙 解决下

使用特权

评论回复
9
wxqfhy| | 2009-2-11 17:25 | 只看该作者

exti中断对外部输入脉冲计数,总是多计不知是何原因

使用exti中断对外部输入脉冲计数,总是多计不知是何原因
大家是否遇到这个问题,郁闷中。。。。。。。!!!!

使用特权

评论回复
10
hqfmcu201| | 2013-5-16 17:19 | 只看该作者
这个不错,收藏一下。

使用特权

评论回复
11
cjhk| | 2013-5-16 18:51 | 只看该作者
这个问题没有遇到过   楼主   帮你顶一个   看啊可能有没有高手能解决这个问题  

使用特权

评论回复
12
cjhk| | 2013-5-16 18:52 | 只看该作者
我软件这一块的经验还是很少   对不住   没有帮上你的忙  只能帮你顶一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

223

帖子

0

粉丝