STM32F103C8T6实现LED闪烁
今天是学习定时器和中断的配置,并通过定时器实现LED间隔一秒闪烁。
LED在最小系统板中位置如下:
#include "led.h"void Led_Init(void)
{GPIO_InitTypeDef LED_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打开GPIOC端口的时钟,至于为什么每次都要打开对应的时钟,请继续往下看LED_InitStructure.GPIO_Pin = GPIO_Pin_13; //LED对应GPIOC端口的13引脚LED_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式为普通推挽输出LED_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //设置输出速度为2MHzGPIO_Init(GPIOC, &LED_InitStructure);
}void Led_Open(void)
{GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}void Led_Close(void)
{GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
时钟问题:
为什么所有寄存器都需要时钟才能配置?因为寄存器是由D寄存器组成的,当时钟到来触发,触发器才能被改写,STM32的时钟就相当于一个开关,当你需要使用的时候就打开相对应的时钟。
#include "stm32f10x.h"void Led_Init(void);
void Led_Open(void);
void Led_Close(void);
定时器的配置如下:
#include "tim.h"uint8_t flag = 0;void Tim_Init(void)
{TIM_TimeBaseInitTypeDef Tim_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);Tim_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割(不分频)Tim_InitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数模式配置为向上计数模式Tim_InitStructure.TIM_Period = 10000-1; //自动重装载寄存器周期的值Tim_InitStructure.TIM_Prescaler = 7200-1; //用来设置预分频值 TIM_TimeBaseInit(TIM2, &Tim_InitStructure);TIM_Cmd(TIM2, ENABLE);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
}void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){flag = 1 - flag;}TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
flag是个标志位,后面用来使LED闪烁。
因为是间隔一秒,所以这里定时器要配置为1秒。
根据:定时时间 = (TIMx_ARR+1)* (TIMx_PSC+1)/TIMcCLK
TIMx_ARR: 自动重装载寄存器的值。
TIMx_PSC: 预分频器的值。
TIMcCLK: 这里我们没有分频,所以是72MHz。
#include "stm32f10x.h"extern uint8_t flag;void Tim_Init(void);
main.c代码如下:
#include "stm32f10x.h"
#include "led.h"
#include "tim.h"
#include "nvic.h"int main()
{Tim_Init();Led_Init();Nvic_Init();while(1){if(flag == 1){Led_Open();}else{Led_Close();}}
}
烧入代码,效果如下图:
STM32F103C8T6实现LED闪烁相关推荐
- [GPIO]stm32f103c8t6 笔记LED闪烁
1.写LED.c代码2 #include "led.h" //初始化PB5和PA1为输出口.并使能这两个口的时钟 //LED IO口初始化 void LED_Init(void) ...
- STM32F103C8T6串口控制LED闪烁
任务:开启时单片机回复已打开:关闭时在电脑显示已关闭:发 送 1 打开:发送 2 关闭. 本次学习是基于STM32的通用定时器结合串口,进行对LED灯闪烁的控制,使得延时函数时带来的误差性,以及消耗大 ...
- 单片机led闪烁代码_单片机、555实现LED闪烁电路
有朋友在后台发消息,希望设计一个LED闪烁电路,闪烁频率为2Hz,想了解LED闪烁的电路原理是什么,下面解答一下,看看有没有写的很通俗易懂.要设计一个闪烁电路,闪烁频率为2Hz,即500ms亮灭交替. ...
- STM32之定时器中断控制LED闪烁
上篇博客我们是用延时函数实现了LED的闪烁,今天我们使用STM32的定时器来使LED闪烁. 关于32的定时器的种类,今天我在这先不做过多的说明,有时间我会再另写一篇博客来专门介绍32的定时器.今天我们 ...
- 控制led闪烁次数_单片机驱动LED灯的进阶之路
对于大多数单片机的学习者或者是从事单片机行业的工程师来说,单片机驱动LED闪烁起来的时候,基本都是我们入坑的开始,同时当时的那种兴奋与喜悦都是难以忘怀的,从LED灯亮起,到闪烁,再到各种流水灯,能开心 ...
- STM32通过串口控制LED闪烁或者呼吸效果
STM32通过串口控制LED闪烁或者呼吸效果 目录 STM32通过串口控制LED闪烁或者呼吸效果 1.准备工作 2.思路分析 3.实际操作 4.小结 1.准备工作 1.首先我们需要准备32的最小系统板 ...
- 【STC8H8K64U】开天斧3.1学习笔记——LED闪烁
1.添加头文件<stc8h.h>,必须是小写,不然keil不认.(不知道为什么keil不认小写,反正能用就行) #include <stc8h.h> 1.1.若要使用空指令&q ...
- 用CCS搭建简单的F28069M工程并控制LED闪烁
文章目录 tips 一 项目的搭建 1.1 说明 1.2 建立步骤 二 LED闪烁代码 2.1 Launch Code Composer Studio (CCS) and Open Resource ...
- 嵌入式开发学习笔记9-做一个好玩的LED闪烁
嵌入式开发学习笔记9-做一个好玩的LED闪烁 前言 实际操作 程序功能 实现思路 程序源码 实现效果展示 前言 LED小灯闪烁实质是控制单片机上的I/O口,通过向I/O口循环输入高低电平,从而控制LE ...
最新文章
- pandas获取dataframe数据列的数据类型、获取dataframe每类数据类型数据列的个数、使用select_dtypes函数、include参数以及exclude参数按照数据类型筛选数据
- 彩蛋还是陷阱?我所经历的期权往事
- JAVA Thread线程异常监控
- http --- 密码、密钥、对称(公开)密钥加密系统、数字签名、数字证书的一些概念
- C++总结笔记(五)——构造函数和析构函数
- 【Linux小技巧】开启关闭蜂鸣声
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)
- 浅析怎样提升win7 旗舰版系统显示质量
- 经验 | 深度学习中从基础综述、论文笔记到工程经验、训练技巧
- php5.2、5.3和5.4,Apache多虚拟主机多版本PHP(5.2+5.3+5.4)共存运行配置
- Requested registry access is not allowed 解决办法
- 变量函数命令 - Hugarian , Camel Pascal
- VS2013 + Qt 提示 There‘s no Qt version assigned to this project for platform Win32
- 关于触发器原理及选型参数
- Golang 1.16 新特性-embed 包及其使用
- 哈哈,原来这叫做“松鼠症”……并谈谈我建议的学习方法
- Mac Mounty挂载NTFS硬盘报错
- C. Petya and Inequiations
- 为什么上传速度比下载速度慢
- 面试经历|为即将找工作的你保驾护航
热门文章
- php 判断后缀名,PHP 文件类型判断代码
- 苹果手机怎么在照片上添加文字_手机美图秀秀怎么给图片添加文字
- uniapp 原生js实现公历转农历
- 从钉钉后台对接考勤打卡信息(仅供参考)
- Gradle实践之自定义打包jar+Log开关自动关闭
- ARP 地址解析协议 IP地址到MAC地址的转换过程
- linux下ftp命令输出日志,ftp中/var/log/xferlog日志解析及ftp常用命令常用
- pthread_cond_destroy死锁卡住问题处理记录
- 有关MAC、PHY和MII
- CF896C Willem, Chtholly and Seniorious(珂朵莉树)