STM32学习笔记(一)——点亮一个LED
引言
最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到时候肯定不够用了,正好前几天买了一块STM32F103ZET6的最小系统,那就赶紧学习吧!从哪里学习呢?同样是从点亮一个小灯开始,就建个工程模板就让我没有耐心了,折腾了一上午终于把工程建立好了!
关于STM32
简介
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,按内核架构分为不同产品:
其中STM32F系列有:
STM32F103“增强型”系列
STM32F101“基本型”系列
STM32F105、STM32F107“互联型”系列
增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
片上资源
下图是 AT89S52的资源
再来看看STM32F103ZET的资源
可以明显看出STM3资源是非常丰富,外设接口很多。正因如此,STM32操作起来不如51那么方便,所以在一些小项目上能用51尽量不用STM32单片机。
点亮一个小灯
LED原理图连接方式
可以看出只要给D13输出一个高电平就可以将led点亮,低电平熄灭。
GPIO初始化配置
学习单片机貌似都是从点亮led灯开始的,像51单片机点亮小灯直接P1=0就ok了,由于STM32的GPIO工作模式有8种(输入4种+输出4种),所以在GPIO输出之前要先对要操作的GPIO进行配置,如下图:
void GPIO_Config(void) //GPIO初始配置
{
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //使能GPIOD的时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //指定引脚13
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速率50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化外设GPIOx寄存器
}
可以看出对GPIO的配置是通过各种函数实现的, 这点和51有所不同,51是直接操作寄存器,其实库函数的本质还是操作寄存器,只不过官方将它封装成了各种函数,来方便操作寄存器,毕竟STM32的寄存器要比51多很多,要记住每个寄存器的名称是不容易的,而通过各个函数就可以简单的操作各个寄存器了,在MDK开发环境中可以通过右键Go to definition of 'xxx'来查看各个函数是如何操作寄存器的。
从初始化配置时,要先使能GPIO的时钟,指定引脚,设定输出速率和工作模式,这些是必不可少的。
电平输出
如何让GPIOD_13输出高低电平呢?官方有对应的函数:
#define LED_ON GPIO_SetBits(GPIOD, GPIO_Pin_13) //端口置1
#define LED_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_13) //端口置0
这里使用了宏定义,方便书写,注意高电平点亮,低电平熄灭
延时函数
void delay(u32 t) //延时函数
{
u16 i;
while(t--)
for(i=;i<;i++);
}
由于STM32的主频有72MHz之高,所以这里的形参定义为了unsigned long 类型,同样下面的变量i,定义为了unsigned int类型,为了占用更多的时间。
主函数
int main()
{
GPIO_Config(); //GPIOD_1初始化配置
while()
{
LED_ON; //点亮
delay(); //延时大概几百毫秒
LED_OFF; //熄灭
delay();
} }
可以看出delay()函数的实参比较大,如果换做100的话,人眼几乎看不出led灯的闪烁,这是因为主频很高,执行一个循环用的时间更少。只有实参足够大,才能达到延时的效果。
程序下载
STM32的程序下载方式有很多,其中最经济,最简单的下载方式就是串口isp下载了,连接方式如下图
另外还要设置一下启动方式;
串口下载时要设置为第二种启动方式,即BOOT0=1,BOOT1=0,然后在按一下Reset键,才可以开始下载(好麻烦^v^)。
下载工具(mcuisp)的设置为如下图:
加载好生成的hex文件后,就可以点击"开始编程"了,等待一小会,就会看到下载完成,小灯闪烁了。
总结
通过控制led闪烁的学习,可以看出stm32的GPIO位操作不是很方便,或许做这种简单的事情大材小用了吧!本文是使用库函数操作GPIO,也可以通过直接操作相关的寄存器来实现,以后会学习一下如何通过寄存器的设置来控制led,以上内容是我初学STM32单片机的个人理解,有描述不恰当或者错误的地方,欢迎各位朋友指正.
参考资料:
AT89S52_百度百科
stm32_百度百科
STM32固件函数库用户手册_百度文库
欢迎大家关注我的个人博客 http://www.wangchaochao.top/
微信扫码关注我的公众号
不定期更新个人学习笔记和技术总结,欢迎大家互相学习交流!
STM32学习笔记(一)——点亮一个LED的更多相关文章
- STM32学习笔记(一) 如何新建一个STM32工程模板
学习stm32,第一步就是选择开发工具了,GCC,MDK,IAR每一种都有自己的优劣势,这里我选择使用MDK软件实现STM32模板.当然如果想更快的接触stm32实例,领略嵌入式开发的魅力,STM也提 ...
- STM32学习笔记——点亮LED
STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...
- STM32学习笔记(四)——串口控制LED(中断方式)
目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...
- stm32学习笔记——外部中断的使用
stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...
- STM32学习笔记——OLED屏
STM32学习笔记--OLED屏 OLED屏的特点: 1. 模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2. 显示尺寸为0.96寸 3. 分辨率为128*64 4. ...
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
- 点亮一个led
1:RS232电平:计算机串口 高电平为-12v,低电平为+12v,所以计算机与单片机进行通信的时候需要加电平转换芯片max232(高电平为-9到-12,低电平为+3到+12之间的. max232通常 ...
- 点亮一个led灯
/********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...
- Android(java)学习笔记219:开发一个多界面的应用程序之两种意图
1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...
- 从点亮一个LED开始,Cortex-A9裸机程序设计
电路原理图: 如何点亮一个LED? 通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了.若要将LED熄灭只需取消高电平输出. 如何使三级管基 ...
随机推荐
- tp框架基础(详细步骤分解,易懂)下
在浏览器中如果要访问操作方法的时候以什么方式来访问 有四种方式 第一种是get方式,第二种是访问路径 这四种方式我们可以通过修改配置文件来改掉url的模式 我们需要来改一下我们的配置文件 在这个路径下 ...
- 查看iis对应w3wp.exe显示的进程ID号(转载)
管理员身份运行cmd,跳转到C:\Windows\System32\inetsrv目录,然后运行appcmd list wp即可查看
- Archlinux 的U盘自动装载(二)升级到 udisks2
在安装 mysql-gui-tools 过程中,发现需要用到 udisks2.udisks和udisks2可以互相替换也可以共用.最后决定换用 udisks2 安装 先卸载原来的软件,如果有的话. p ...
- .Net Core迁移到MSBuild平台(二)
一.前言 在上一篇文章.Net Core迁移到MSBuild的多平台编译问题中,简单的讲了下新的项目配置文件中的节点配置,这篇我将用一些例子来详细讲下从project.json迁移到msbuild过程 ...
- HTML5学习笔记<二>:元素,属性,格式化
HTML元素 元素是指从开始标签到结束标签的所有代码. 开始(开放)标签 元素内容 结束(闭合)标签 <p> this is my web page </p> 没有内容的 HT ...
- HBase架构
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6573817.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...
- 【Spring】使用Spring和AMQP发送接收消息(中)
上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息.通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bea ...
- 【SF】开源的.NET CORE 基础管理系统系列导航
SF是一套基于ASP.NET Core MVC+EFCore+Bootstrap开发出来的基础管理系统,源代码完全开源,可以帮助你解决C#.NET项目中重复编码的繁琐工作,让开发人员远离加班! SF ...
- CodeBlocks常用重要快捷键大全!!
CodeBlocks常用操作快捷键 编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销(后退一步) Ctrl + S: ...
- iOS 文本转语音(TTS)详解:Swift
上一篇博客讲解了iOS的speech FrameWork语音识别的功能:http://www.cnblogs.com/qian-gu-ling/p/6599670.html,对应的这篇博客就写一下文本 ...