使用库来进行LED灯的开关及延时的实现

呼吸灯实现之前使用直接修改地址的方式实现点灯,这次用 gpio 实现点灯,并加上延迟,实现一开一关的呼吸灯
首先需要在 keil 中开启对应的运行环境,点击 manager run-time,选择device 勾选以下内容
gpio
stdperiph drivers -> framework
stdperiph drivers -> gpio
stdperiph drivers -> rcc(时钟)
stdperiph drivers -> tim(定时器所需)
其中,之前的 startup 和 core 是必勾选的
开启后就可以使用 gpio 了
gpio使用首先需要开启时钟,通过以下函数
// 第一个参数为外设名称// 第二个参数为 enable(启用) 或者 disable(禁用)rcc_apb2periphclockcmd(rcc_apb2periph_gpioc, enable);然后初始化,使用 gpio_init 函数
// 有两个参数, 第一个参数为使用的i/o,例如 gpioc(单片机上标出来了 abc...)// 第二个参数则需要定义结构体gpio_inittypedef typedef;// 这个地方是指定端口,例如我的是 pc13,那么就是13typedef.gpio_pin = gpio_pin_13;typedef.gpio_mode=gpio_mode_out_pp;typedef.gpio_speed=gpio_speed_50mhz;// 最后初始化gpio_init(gpioc, &typedef);最后可以通过输入/输出函数控制gpio口
例如点灯
// 将指定gpio口置为高电平(关)gpio_setbits(gpioc, gpio_pin_13);// 将指定gpio口置为低电平(开)gpio_resetbits(gpioc, gpio_pin_13);代码如下,就可以实现刚开始的点灯了
#include stm32f10x.h int main(void) { /* 开启时钟, 使用的都是已经封装好的函数 */ rcc_apb2periphclockcmd(rcc_apb2periph_gpioc, enable); /* 初始化 */ gpio_inittypedef typedef; typedef.gpio_pin = gpio_pin_13; typedef.gpio_mode=gpio_mode_out_pp; typedef.gpio_speed=gpio_speed_50mhz; gpio_init(gpioc, &typedef); /* 开 */ gpio_resetbits(gpioc, gpio_pin_13);}每次烧录都需要按下reset键才能看到结果
延时知道了开关后,加上延时,就可以做出呼吸灯的效果了
可以用循环的方式让单片机做无意义的事情来消耗时间,但这样精确度低
延时代码如下,首先需要执行定时器初始化才可以进行延时
/** 初始化定时器 */void tim3_init(void){ tim_timebaseinittypedef tim_timebaseinitstructure; rcc_apb1periphclockcmd(rcc_apb1periph_tim3,enable); tim_timebaseinitstructure.tim_period = 50000-1; tim_timebaseinitstructure.tim_prescaler = 60-1; tim_timebaseinitstructure.tim_countermode=tim_countermode_up; tim_timebaseinitstructure.tim_clockdivision=tim_ckd_div1; tim_timebaseinit(tim3,&tim_timebaseinitstructure);}// 微秒级延时void tim3_delayus(u16 xus){ // 启动定时器 tim_cmd(tim3,enable); while(tim3- >cnt cnt = 0; // 关闭定时器 tim_cmd(tim3,disable);}// 毫秒级延时void tim3_delayms(u16 xms){ int i; for(i=0;icnt cnt = 0; // 关闭定时器 tim_cmd(tim3,disable);}// 毫秒级延时void tim3_delayms(u16 xms){ int i; for(i=0;i< xms;i++) { tim3_delayus(1000); }}int main(void) { /* 开启时钟, 使用的都是已经封装好的函数 */ rcc_apb2periphclockcmd(rcc_apb2periph_gpioc, enable); /* 初始化 */ gpio_inittypedef typedef; typedef.gpio_pin = gpio_pin_13; typedef.gpio_mode=gpio_mode_out_pp; typedef.gpio_speed=gpio_speed_50mhz; gpio_init(gpioc, &typedef); // 初始化定时器 tim3_init(); while (1) { /* 开 */ gpio_resetbits(gpioc, gpio_pin_13); // 延时一秒 tim3_delayms(1000); // 关 gpio_setbits(gpioc, gpio_pin_13); // 延时一秒 tim3_delayms(1000); }}

蜂巢能源毫不掩饰其在动力电池领域的野心
移动转售业务牌照名单确定 22家虚拟运营商获牌照
处理器SDK支持Linux操作系统
华为被限制之后 其他国产厂商怎么办
电子爆竹电路设计原理图
使用库来进行LED灯的开关及延时的实现
小米MIX2和iPhoneX前后脚发布,谁更值得入手呢?
关于电子产品涨价传闻
vivo APEX 概念机评测:真全面屏 吊打一切
全自动智能锁的保养方法有哪些?坤坤智能锁告诉你
台积电在台南厂区新建8英寸厂
PCB阻抗如何来控制
Facebook正在研究发行加密货币和搭建自身的区块链架构
专访海尔智家黄晓武:设立ESG委员会是全球化的责任与担当
如何选择质量好的逆变输出变压器
微软与Adobe强强联手,破解数字营销与降本增效难题
剑指锂电池和超级电容 石墨烯的五大应用分析
云计算产业生态逐步显现,SaaS 服务群雄逐鹿
成就客户 创造未来 泛林集团亮相首届中国国际进口博览会
BitUN强势登陆美国纽约时代广场路透大屏