PWM在高频情况下,一个很好的用处就是通过控制占空比来控制输出的功率,比如控制风扇转速.LED灯的亮度等.这次就利用PWM的中断功能,动态改变脉冲的占空比,来实现呼吸灯的效果. 一.实现思路 PWM可以选择让计数器在周期结束产生中断(在周期中央对齐时,可能选择在周期中央也产生中断),并且可以在运行的时候动态地调整占空比.周期.极性等属性.所以可以在中断处理函数中动态地改变占空比以改变LED灯的亮度. 这次也将使用通道0和引脚PA0. 二.PWM设置 这里需要用到较高频率的时钟,所以选择使用主时钟…
让一个LED灯闪烁不过瘾,我们应该让这块开发板完成一点更高难度的任务:比如让两个LED灯闪烁. …… 当然了,以我们的现在使用的空循环技术,还是可以实现这点的.但是这样显得略为低端.所以我们使用一个高端点的技术:中断.还有就是会介绍一下在CMSIS里怎么使用中断. 一.电路 二.实现思路 第一个LED的闪烁还是用之前使用的空循环吧,别把世界弄得太复杂了. 第二个LED的闪烁就稍微自动化一点了:使用一个定时器,让它在到了需要切换引脚电平的时候通知我们一下.这样做的好处就是我们只需在定时器通知时关注…
之前我们使用空循环,达到了延迟的目的,但是这样子的延迟比较不精确.现在就使用实时定时器(RTT)来进行更为精确的计时.RTT虽然不是特别通用,在某些单片机上可能没有,但它较为简单. RTT内部有一个计数器,并且可以配置这个计数器的时钟.通过配置以及计算,就可以得出经过一段时间后,该计数器的增加值.和之前一样,我们使用空循环来完成延迟,只是延迟退出的条件变为“计数器增加了一个特定的值”. 一. RTT配置 为实现这个功能,需要配置的主要就是分频数了.RTT的时钟可以选择对慢时钟(SCLK,32.7…
最近因为导师要写一本关于SAME4单片机的书籍,而我也作为一个嵌入式的初学者看了这本书.现在也让我写写几个小的程序,做做示例.既然写了文档之类的,就发到博客上来吧. 目前关于这芯片能参考的书籍大概就只有英文手册了.用的板子是SAM4E16E.IDE用的是Atmel Studio.既然是学习单片机,就没有使用asf框架,而是直接采用访问寄存器的方法了. 第一个程序就是控制板子上一个LED灯的闪烁了. 一.电路 通过查看电路图,可以发现有一个蓝色的LED灯连接在PA0引脚上.我们可以通过改变PA0输…
RTT主要用做一个全局的定时器,而且不太通用.现在尝试使用一个更为通用的定时器进行定时:定时计数器(Timer Counter, TC). TC提供了广泛的功能,主要可以分为对输入的测量,以及波形的输出.同样,它可以产生一系列的中断.这一次将使TC以一个固定的周期产生中断,以达到定时的目的. 一. TC配置 1. 在PMC中使能TC时钟. 2. 时钟选择. TC的每个通道内部都有一个32位的计数器.可以为这个计数器选择一个时钟,使其以固定频率步进.为使LED的闪烁频率较低,需要选择较小的时钟周期…
现在试试用按钮控制LED灯……让LED在一个按钮按下时亮起:弹起时灭掉. 主要目的是学习GPIO的输入及中断. 一. 电路 图中的J39-n是几个跳线插座,位置在开发板LCD附近,往下进行前要先确保跳线是接通的. 可以看到,当按钮按下时,引脚接地.即若引脚接个上拉电阻,则在按钮弹起状态下,引脚处于高电平状态:而在按钮按下时,则处于低电平状态. 这次使用的按钮是BP3,即PA20引脚:LED为蓝色LED,即PA0. 二. 最简单的办法 在开发版重置时,所有的引脚就默认接了上拉电阻. 所以,直接使用…
两个LED灯虽然可以闪了,但是总是需要CPU的参与.现在尝试使用一种更为自动化的方法:让脉宽调制(PWM)控制器输出具有一定周期和占空比的方波,以此控制LED灯的亮灭. 一.实现思路 依然使用蓝色和琥珀色的LED灯.开发板上能启用四个PWM通道,每个通道能输出两个互补的方波.我们会启用其中的一个通道,然后让这个通道的两个输出分别控制一个LED灯.但是由于这两个引脚上不存在同一通道的输出,所以需要第三个引脚辅助. 我们将使用PWM的通道0. 1.    PWMH0输出至引脚PA0(外设A). 2.…
浮点单元(Floating Point Unit,FPU),是用于处理浮点数运算的单元. 为使用FPU,除了需要启用FPU外,还需要对编译器进行设置,以使其针对浮点运算生成特殊的指令.虽然在Atmel Studio 6中,开发板使用的工程模板中默认就完成了这两部分工作,但这次仍然对设置的方法进行介绍,同时简单测试一下FPU的效率. 一. 编译器设置 AS6.1 SP2中,使用的编译器为arm-none-eabi-gcc.exe,版本为4.7.3.其中“none”表示没有指定操作系统,“eabi”…
DSP(Digital Signal Processing,数字信号处理)中会使用大量的数学运算.Cortex-M4中,配置了一些强大的部件,以提高DSP能力.同时CMSIS提供了一个DSP库,提供了许多数学函数的高效实现. 这次就先做一个简单的尝试,求两个向量的数量积. 一. 硬件 MAC单元 MAC(Multiply-ACcumulate,乘积累加),是DSP中常用的一种运算.Cortex-M4配置了一个32位的MAC单元,它能在1个周期里实现最高难度为32位乘32位再加64位的运算,或是两…
很多时候,一个电压不仅仅需要定性(高电平或者低电平),而且要定量(了解具体电压的数值).这个时候就可以用到模数转换器(ADC)了.这次的内容是测量开发板搭载的滑动变阻器(VR1)的电压,然后把ADC转换的结果通过UART打印出来.同时,也简单介绍了校准的方法. SAM4E芯片中,ADC是由AFEC管理的.同时,AFEC可以使用一个多路复用器以选择需要转换的信号的通道,也可以通过平均多次ADC转换的结果以提高转换精确度. 一. 电路图 通过顺时针方向旋转该变阻器,PB1引脚电压将变大,其电压变化范…