STM32-点灯程序
STM32-点灯程序
最近学习使用STM32,做个记录吧。
刚接触,就先从点灯程序开始。单片机的点灯程序,就相当于学语言的hello world程序了。
先简单介绍下开发环境,芯片类型是STM32F030C8,集成开发环境用的是Keil5 MDK-ARM,仿真器使用JLINK。
要点灯,先要确定接灯的引脚。我的板子上是PA0接的一个led灯。
在程序中,就是GPIO_Pin_0了。为了扩展性,或者说,为了方便修改引脚,我使用了一个函数来封装。如下:
int get_gpios(){
return GPIO_Pin_0 ;//连接到灯的gpio引脚,可以有多个
}
要点灯,也就是要将这个引脚设置为输出,并控制它的高低电平。我们先来进行初始化设置:
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能GPIOA时钟 */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* 配置LED相应引脚PA1*/
GPIO_InitStructure.GPIO_Pin = get_gpios();
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIOA->BSRR = get_gpios() ;//点亮灯
}
具体的闪灯的实现,也写了一个函数,方便后面调用:
int flag_led_on=0;
void LED_toggle(){
flag_led_on = 1 - flag_led_on;
if(flag_led_on!=0){
GPIOA->BRR = get_gpios() ; //reset
} else {
GPIOA->BSRR = get_gpios() ; //set
}
}
这样,主体的功能就完成了,剩下的就是在主循环中进行调用了。
主函数非常简单:
int main(void)
{
LED_Init();//灯的初始化
while(1){
Delay(1600000);//延时1s
LED_toggle(); //LED翻转
}
}
这里还有一个新函数:Delay(),就是一个延时函数。为了简化代码,所以延时函数没有使用定时器,是简单的循环等待。如下:
void Delay(uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
至此,这个点灯程序就完成了,是不是很简单。
另外,简单说明下延时函数为什么使用了 1600000 为参数。
是我通过实验,发现设置为这个值对应的时间基本上是1s。
但是,在不同的板子上,程序做不同的优化,或者延时代码的写法有所不同,都会导致延时时间的差异。具体取值可以自己根据实际运行情况调整。
以后,我再仔细分析下这个取值的道理。
这个demo的工程代码,可以从如下地址获取:
https://download.csdn.net/download/lintax/10734630
STM32-点灯程序相关推荐
- CH340进行STM32单片机程序烧录
目录 代码: 接法: 结束: 刚写完32点灯程序,接下来打算用CH340进行烧录 代码: #include<stm32f10x.h> void led_init(){ GPIO_InitT ...
- STM32G070RBT6基于Arduino框架下点灯程序
STM32G070RBT6基于Arduino框架下点灯程序 ✨说明:Arduino STM32系列开发环境搭建不在本示例范围内. 相关篇<[硬件开源电路]STM32G070RBT6开发板> ...
- STM32 UART2程序--端口重映射
STM32 UART2程序 2012-12-04 16:26:05 分类: LINUX USART1程序很多,看看USART2程序.注意红色部分,首先要使能相关端口的时钟. 因为USART2可以映射成 ...
- 嵌入式作业使用MDK编译stm32简单程序
目录 一.MDK和stm32介绍 1.什么是stm32 2.什么是MDK 二.环境配置 1.准备工作 2.安装keil软件 3.keil的环境设置 三.stm32程序编译 1.新建工程 2.新建mai ...
- STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板
STM32下载程序至SRAM--基于正点原子精英STM32F103ZET6开发板 如题,由于STM32的FLASH烧写寿命在1万次左右,对于本人这样的改一行代码都想下载到开发板中测试的强迫症患者,真是 ...
- Vscode开发STM32单片机程序
STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的.这里介绍一些使用 gcc + vscode 开发单片机程序的经验.(这里不解释 gcc 是什 ...
- ch340串口驱动_如何使用串口来给STM32下载程序
前言 第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成.后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进 ...
- 树莓派c语言编程点亮灯,树莓派点灯程序
一:树莓派GPIO操作的常用命令 1,gpio readall //读出树莓派的所有管脚的配置情况.电平状态; 2,设置管脚的电平状态 gpio -g mode 26 out 设置管脚为输出模式,- ...
- STM32 烧录程序后无法在内部FLASH保存数据问题解决
STM32 烧录程序后无法在内部FLASH保存数据问题解决 新接手一套代码,要求在Flash特定区域保存数据.硬件为STM32F030C6,有32k Flash. 原代码中已经将数据打包成一个结构体, ...
- 使用CH340串口模块对STM32进行程序下载
使用CH340串口模块对STM32进行程序下载 一.接线 二.利用FlyMcu进行STM32程序下载 1.STM32配置 2.FlyMcu配置 一.接线 CH340 STM32 VCC VCC GND ...
最新文章
- Javadoc代码追踪记录
- python设计一个动物类_python面向对象 动物园 例题
- 用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue
- 黑客攻击澳大利亚政府网站 抗议互联网过滤器
- Java Eclipse开发环境搭建及注意事项
- SSM框架知识点复习
- 马斯克再带货狗狗币:超7成网友票选狗狗币为未来货币
- UIAppearance
- 分布式服务框架之Dubbo简介
- Go语言:运行代码报错main redeclared in this block 	previous declaration at .\test.go:5:6
- 设计模式(一)单例模式:1-饿汉模式(Eager)
- 司空见惯 - 体彩中奖交多少税
- 转贴--爱的最高境界
- 好兄弟结婚,送给他的小诗
- Android之重写与重载
- :hover的几种选择用法
- 搭建自己的github.io博客
- 【个人研究】21世纪西方运用脑电(EEG)的音乐研究动向分析(一)
- CATIA V5焊接夹具2D出图到3D实战设计视频教程
- 特斯拉上海工厂二期进展神速:已经开始建造屋顶