定时器一直是很有用的部件,在我们的系统中必须用到定时器。
在STM32L053 有3个通用定时器 一个低功耗定时器 一个基本定时器,两个看门狗 和 systick 定时器
时钟分布与控制:因为官方没找到定时启动额例子所以决定自己用定时器来写为了更好地上手寄存器操作 所以先用GPIO口上手4个配置寄存器 GPIOx_MODR GPIOx_OTYPER GPIOx_OSPEEDR GPIOx_PUDDER 2个数据寄存器GPIOX_IDRGPIOX_ODR主要特点(1)输出状态:推挽输出 开漏输出(上拉 / 下拉)(2)输出数据:GPIOX_ODR 或则复用功能的输出(3)每个IO口可以进行速度选择(4)输入:浮空 (上拉 / 下拉),模拟输入(5)输入到GPIOX_IDR或则到复用功能
模式选择
结构体它已经定义好了,这是自己写的寄存器版本IO
口操作,过程也是比较艰辛的,刚开始写的GPIOA->MODER=0x33333333
半天一点效果都没有,原来是自己的模式选错了,而且这里的灯也是GPIOA
组的,连原先的效果都看不到了,还好自己一行一行代码屏蔽,看到底是哪出了问题,这不失业为一种调试的好方法。所有的GPIOA
口都和灯是一样的效果了,用示波器检测过!!!! 可以用寄存器写,放在一个.h
文件里,但是这个不具备报错功能,增加了开发难度!!
定时器TIM21,22工作原理图 #include "mbed.h"Ticker timer;DigitalOut led1(LED1);void attime(){ led1=!led1; } int main() { timer.attach(&attime,0.5);// miao while(1) { } } 上面是找到的一个定时器用法的例子,它是用 Ticker类 声明了一个变量,这个变量的用法就是通过一个Ticker类里的一个方法 一:timer.attach(&attime,0.5) 注册了一个定时器,第一个参数中断子函数的名字,第二个参数是定时的时间单位是s。 我自己通过测试找到了这个定时器用的是tim22,关闭它的允许开关这个定时器就工作不了。