2. 基于STM32F10x.3.5.0库的流水灯程序实现

  上文主要描写了如何新建一个工程,那么下面就开始了stm32芯片的学习之旅,像c/c++中经典的入门代码"hello world"一样,stm32入门程序流水灯绝对也是经典,如果你已经有了一定的C语言基础以及对51芯片有一定了解,那么学习起来绝对事半功备,当然没有也不需要担心,本程序代码量很少,实现起来很简单。不过学习stm32,第一点就是要转变思路,从现在开始你不在是仅仅和编程语言打交道了,交叉编译的方式注定嵌入式软硬件不分家,必要的硬件知识也是必须的(本博客中所有程序都是在stm32f107芯片,基于stm提供的芯片固件库实现的,其它芯片需要自行修改,以后就不在赘述)。

  当然现在只是刚开始,硬件需求低,只要知道外设选择的端口就可以了,如本例:

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

用过51的应该都知道,我们只要将对应的I/O设置为1,0即可,不过STM32直接设置是不行的,这是因为STM32的每个管脚都可以有8中模式:

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

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

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

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

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

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

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

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

从上面可以得出,想要实现流水灯,GPIO口的配置就是推挽输出,且低电平点亮

了解了这些之后,对于简单的流水灯就知道如何做了

第一步:配置外设,如流水灯,就是配置上述4个端口

第二步:设置/复位端口

第三步:流水灯逻辑实现

熟悉下stm32f10x固件函数库的说明书,就可以开始写程序了。

个人建议常见的外设配置可以封装到同一个文件里,这样便于以后的修改和移植(见文件Lightwater中stm32f10x_user.c和stm32f10x_user.h)文件

配置代码如下:

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的时钟拿出来讲,但这里要注意点:

时钟使能要在寄存器配置之前,这是因为stm32的寄存器配置也是依靠时钟脉冲才能够处理的。

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

GPIO_Speed_50MHz设定的意义不大,主要用于限制输入的,与本例无关。

如上,就完成外设初始化,接下来就可以像51那样操作LED了,实现代码:

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

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

时间: 2024-08-03 20:13:10

2. 基于STM32F10x.3.5.0库的流水灯程序实现的相关文章

基于HTML5的开源图标库-ECharts

ECharts: 来自百度商业前端数据可视化团队,基于html5 Canvas,纯Javascript图表库,底层依赖ZRender,商业产品常用图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘.整合的能力.图表类型支持折线图(区域图).柱状图(条状图).散点图(气泡图).K线图.饼图(环形图).雷达图(填充雷达图).和弦图.力导向布局图.地图,同时支持任意维度的堆积和多图表混合展现. 链接是:h

基于QT开发的第三方库

基于Qt开发的第三方库 分类: Qt2014-02-12 11:34 1738人阅读 评论(0) 收藏 举报 QT第三方库 目录(?)[+] 文章来源:http://blog.csdn.net/zhgn2/article/details/14613519 QxOrm QxOrm is a new open source ORM (Object Relational Mapping) C++ library designed to provide : * Persistence (based on

基于Grunt构建一个JavaScript库

现在公认的JavaScript典型项目需要运行单元测试,合并压缩.有些还会使用代码生成器,代码样式检查或其他构建工具. Grunt.js是一个开源工具,可以帮助你完成上面的所有步骤.它非常容易扩展,并使用JavaScript书写,所以任何为JavaScript库或项目工作的人都可以按自己的需要扩展它. 本文解释如何使用Grunt.js构建JavaScript库.Grunt.js依赖Node.js和npm,所以第一节解释其是什么,如何安装和使用.如果你对npm有了解,那你可以跳过这一节.第四和第五

【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库

[机器学习算法实现]系列文章将记录个人阅读机器学习论文.书籍过程中所碰到的算法,每篇文章描述一个具体的算法.算法的编程实现.算法的具体应用实例.争取每个算法都用多种语言编程实现.所有代码共享至github:https://github.com/wepe/MachineLearning-Demo     欢迎交流指正! (1)kNN算法_手写识别实例--基于Python和NumPy函数库 1.kNN算法简介 kNN算法,即K最近邻(k-NearestNeighbor)分类算法,是最简单的机器学习算

一个基于Gsoap 的ONIVF C++ 库

https://github.com/xsmart/onvifcpplib 这个库支持ProfileS 和ProfileG,目前还在开发当中,现在已经支持Event 下面是一个客户端的例子 int _tmain(int argc, _TCHAR* argv[]) { int ret; /* 192.168.1.1 is the NVT, 192.168.1.234 is the NVC */ string url = "http://192.168.1.1/onvif/device_servic

Cstyle的札记,Freertos内核详解,基于cortex-m3,第0篇

Freertos是一个硬实时内核,支持众多的微处理器架构,我们可以从它的官网(www.freertos.ort)下载它的sourcecode,同时也可以看出它支持了几十种的微处理器架构,这些就不罗嗦了.之所以选择研究这个,是应为窥探RTOS内核的内幕一直每一个做底层软件开发人员的心愿,选择过好几种RTOS但他们有的是需要收费,有的不太成熟也不够系统,有的虽然比较成熟但是系统太大不太适合研究.而freertos就不同了,它除了包含RTOS所需要的基本的东西之外最大的特点就是开源+简单并且支持了非常

【机器学习算法实现】logistic回归__基于Python和Numpy函数库

[机器学习算法实现]系列文章将记录个人阅读机器学习论文.书籍过程中所碰到的算法,每篇文章描述一个具体的算法.算法的编程实现.算法的具体应用实例.争取每个算法都用多种语言编程实现.所有代码共享至github:https://github.com/wepe/MachineLearning-Demo     欢迎交流指正! (2)logistic回归__基于Python和Numpy函数库 1.算法简介 本文的重点放在算法的工程实现上,关于算法的原理不具体展开,logistic回归算法很简单,可以看看A

H2O是开源基于大数据的机器学习库包

H2O是开源基于大数据的机器学习库包 H2O能够让Hadoop做数学,H2O是基于大数据的 统计分析 机器学习和数学库包,让用户基于核心的数学积木搭建应用块代码,采取类似R语言 Excel或JSON等熟悉接口,使的BigData爱好者和专家可以利用一系列简单的先进算法对数据集进行探索,建模和评估.数据收集是很容易,但是决 策是很难的. H2O使得能用更快更好的预测模型源实现快速和方便地数据的挖掘. H2O愿意将在线评分和建模融合在一个单一平台上. H2O提供了机器学习的培训手册供学习:H2O训练

基于restful注解(spring4.0.2整合flex+blazeds+spring-mvc)<一>

摘自: http://www.blogjava.net/liuguly/archive/2014/03/10/410824.html 参考官网:1.http://livedocs.adobe.com/blazeds/1/blazeds_devguide/2.http://docs.spring.io/spring-flex/docs/1.5.2.RELEASE/reference/html/1)下载blazeds(turnkey4.0.x版本)网址:http://sourceforge.net/