学会了如何新建一个工程模板,下面就要开始动手实践了。像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. Integer Inquiry -TJU1112

    作为最简单的高精度加法,要注意的是如下几点, 第一,因为是数位达到上百位的大数,所以只能用字符串数组来存贮. 第二,为了方便之后的相加操作,应该把字符串数组逆序转化为一个整型数组. 第三,在控制进位的 ...

  2. c语言中各个类型的sizeof长度

    #include <stdio.h> int main() {     printf("\nA Char is %lu bytes", sizeof( char )); ...

  3. 20150916_001 vba 基础

    一.什么是“宏”.“宏”有什么用 关于“宏”的详细定义,可以参考百度百科的解释(点击查看).我给它一个简单的或许不太严谨的定义: 宏的通俗定义:宏是被某些软件所能识别.理解并执行的特定代码/脚本. 宏 ...

  4. SSH配置私钥登陆服务器

    前言 本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题, ...

  5. MSM8909+Android5.1.1之系统烧录

    1.     安装高通USB驱动 图1 安装成功后,同时按下设备的音量+和音量-按键,且用USB连接到设备上,在设"设备管理器--->端口"下面看到USB虚拟的端口,如下: ...

  6. 【leetcode❤python】232. Implement Queue using Stacks

    #-*- coding: UTF-8 -*-#双栈法class Queue(object):    def __init__(self):        """      ...

  7. Java——再看IO

    一.编码问题 utf-8编码中,一个中文占3个字节,一个英文占1个字节:gbk编码中,一个中文占2个字节,一个英文占1个字节. Java是双字节编码,为utf-16be编码,是说一个字符(无论中文还是 ...

  8. Calling / Running a report in Oracle forms 10g / 11g

    Calling / Running a report in Oracle forms 10g / 11g Below is the procedure to call a report in Orac ...

  9. celery入门

    认识 这里有几个概念,task.worker.broker.顾名思义,task 就是老板交给你的各种任务,worker 就是你手下干活的人员. 那什么是 Broker 呢? 老板给你下发任务时,你需要 ...

  10. CUBRID学习笔记 27 数据类型4

    范围比较 数字和字符串比较 字符串被转为double SELECT i FROM t WHERE i <= all {'11','12'}; i ============= 1 2 3 4 字符 ...