学会了如何新建一个工程模板,下面就要开始动手实践了。像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推。如果你已经有了一定的C语言基础以及曾经使用过类似的芯片,那么学习起来绝对事半功备。当然没有也不需要担心,本项目实现起来很简单。不过学习嵌入式,第一点就是要转变思路,从现在开始你不在是仅仅和编程语言打交道了,交叉编译的方式注定嵌入式项目软硬件不分家,从硬件实现,软件设计,软硬件调试,硬件运行观察结果,熟悉和适应这个流程对于嵌入式学习和研发具有重要意义。

  因为所有例程都是在现有开发板完成的,所以主要涉及上面后三个方面,其中最核心的部分就是软件设计。流水灯的实现并不复杂,系统的来说包含硬件接口信息获得,驱动配置,逻辑实现,编译测试等组成。了解了上述流程,项目设计就比较简单了:

  1)原理图分析

  根据上面原理图。就能得出信息LED对应端口PD2,PD3,PD4,PD7,外部上拉电阻,低电平点亮。

  STM32的GPIO端口工作模式有8种:

  模拟输入  用于模拟量的输入,或者低功耗下省电。

  下拉输入  端口内下拉电阻电路导通。默认为低电平,外部高电平动作。

  上拉输入  端口内上拉电阻电路导通,默认为高电平,外部低电平动作。

  浮空输入  端口内上下MOSFET均不导通,高阻态,输入状态仅由端口决定。

  开漏输出  端口输出为0时内部下拉电阻电路接地,输出1时端口相当于悬空,即默认只能输出0,如果外部需要输出1,需要外接上拉电阻电路

  推挽输出  端口输出为0时内部下拉电阻电路接地,输出1时内部接上拉电阻电路,默认输出为0。

  复用开漏输出 内部设置同开漏,但被其他外设复用。

  复用推挽输出 内部设置同推挽,但被其他外设复用。

  结合原理图和GPIO端口的配置信息,可知端口配置为推挽输出,由内部上拉电阻来保证LED熄灭。

  熟悉下stm32f10x固件函数库中的stm32f10x_gpio.c文件,接下来就可以开始项目编程了。

  LED相关引脚初始化:

void LED_UserConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义必须在所有运行代码之前,c语言机制问题 /*使能外设区域时钟*/
RCC_APB2PeriphClockCmd(RCC_LED_GPIO, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_LED_ALL; //选择LED输出的端口,可根据实际需要配置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设定GPIO最大输出频率
GPIO_Init(GPIO_LED, &GPIO_InitStructure);
}

  使能外设区域时钟对于所有外设都是必须的,且要先于外设初始化函数,这是因为stm32的寄存器配置也是依靠时钟脉冲才能够处理的。

  GPIO_Mode_Out_PP即固件函数库中对应推挽输出。

  如上,就完成外设初始化,接下来就可以直接利用固件库提供的API接口操作LED了,具体实现代码:

void LED_Control(u8 LED_Number)
{
GPIO_SetBits(GPIO_LED,GPIO_LED_ALL);//关闭所有LED
switch(LED_Number)
{
case :
GPIO_ResetBits(GPIO_LED,GPIO_LED_1);//LED1点亮
break;
case :
GPIO_ResetBits(GPIO_LED,GPIO_LED_2);
break;
case :
GPIO_ResetBits(GPIO_LED,GPIO_LED_3);
break;
case :
GPIO_ResetBits(GPIO_LED,GPIO_LED_4);
break;
default:
GPIO_SetBits(GPIO_LED,GPIO_LED_ALL);
break;
}
}

  如此,就实现了LED1点亮->LED1灭->LED2亮->......的循环过程,完整代码可参考文件1-1,希望对入门stm32学习有帮助!

  具体代码参考:http://files.cnblogs.com/files/zc110747/1.LightWater.7z

STM32学习笔记(二) 基于STM32-GPIO的流水灯实现的更多相关文章

  1. 学习笔记——单片机简介 & 点亮LED & 流水灯 & 电路基础【更新Ing】

    视频地址:https://www.bilibili.com/video/av10765766 超详细!!!!!! 单片机内部三大资源 [资源:单片机可提供使用的东西] FLASH 可以重复擦写 断电后 ...

  2. STM32学习笔记(四)——串口控制LED(中断方式)

    目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...

  3. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  4. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

  5. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

  6. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  7. STM32学习笔记-NVIC中断知识点

    STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...

  8. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  9. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

随机推荐

  1. bzoj 1588营业额统计(HNOI 2002)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1588 splay  bottom-up的数组实现. 题意就是给你一组数,求每个数与在其前面且与其最相 ...

  2. (POJ2635)The Embarrassed Cryptographer(大数取模)

    The Embarrassed Cryptographer Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13041 Accep ...

  3. Unity胶囊体的碰撞检测实现

    可选是否打开矩阵变换,支持xyz三种朝向 using UnityEngine; using System.Collections; using System.Collections.Generic; ...

  4. Oracle数据库的启动与停止

    oracle linux下开启与关闭 .启动ORACLE监听 首先要登录用户oracle:su - oracle oracle@localhost bin]$ lsnrctl --启动oracle监听 ...

  5. TestNG测试框架在基于Selenium进行的web自动化测试中的应用

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...

  6. 使用main方法调用http请求本地服务器的某个servlet报错问题

    java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8081/test/myS ...

  7. spring webmvc使用ResponseBody前,在配置文件中的配置

    spring的版本不同, 导致配置引用地址不同 首先引用一个jar包 <dependency> <groupId>com.fasterxml.jackson.core</ ...

  8. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  9. ContentProvider官方教程(6)provider支持的数据类型

    Provider Data Types Content providers can offer many different data types. The User Dictionary Provi ...

  10. Jetty和Tomcat的选择:按场景而定

    Jetty和Tomcat的选择:按场景而定 Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器.由于它们的实现都遵循Java Servlet规范,一个Ja ...