单片机之STM32入门——(1)程序结构

  • 引言
  • 1.初识单片机
    • 1.1初始配置
    • 1.2程序下载
  • 2.GPIO的使用
    • 2.1资源下载
    • 2.2初始化源代码
  • 3.程序结构
    • 3.1文件的建立
    • 3.2程序结构源代码

引言

这第一次博客便是记录寒假学习STM32之路,单片机这个倒是也听过很多了,但是一直没有系统的接触过,都只能算是小打小闹,以前说是还没有学过C语言,难以入手,但是现在回想来看,感觉倒像是自己每次在起步遇到困难就放弃了,没有继续做下去。现在既然已经学习过了C语言,倒也是没有这样的借口,当然也得感谢孟神带着我们学习。加油!!!

1.初识单片机

对于咱们初学者来说,最大的困难就在于不知道这些符号,字母,单词是啥意思。也不知道软件和硬件该如何操作。很容易打击学习的信心,所以,首先,我们先不用去深究这些代码的含义和软件这复杂的界面。咱先按照步骤操作,跑起来第一个程序。

1.1初始配置

打开USER文件夹中的LED.uvprojx文件
此时进入到软件界面。看到这复杂的界面和众多的按钮,我们找到上面的这个按钮并点击,现在需要进行初始配置。

  • 选择Debug
  • 并选择ST-Link Debugger
  • 然后点击Settings
  • 确定接口为ST-LINK/V2


1.2程序下载

在主界面中依次点击

  • 第一个Translate(编译)
  • 第二个Build(链接
  • 第六个Download(下载)


等待程序下载完成后,按下开发板上的复位键,便可以看到两个灯在交替闪烁了,此时便说明,我们已经完成了第一个单片机程序的配置及下载。

2.GPIO的使用

2.1资源下载

根据我们这块板子的图纸中LED的端口可知,我们需要用到PE1、PE0、PB9三个端口。

根据ST官网中下载STM标准库,其中包含有GPIO函数,另外在ST官网下载STM32中文参考手册其中详细讲解了各个函数的功能及使用方法。

2.2初始化源代码

下面是我们的LED初始化程序源代码。

void led_init(){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //打开PB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //打开PE的时钟//初始化PB9GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//输出模式为推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//设置端口为9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速度GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPOIBGPIO_ResetBits(GPIOB,GPIO_Pin_9);//复位端口PB9//初始化PE0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStructure);GPIO_ResetBits(GPIOE,GPIO_Pin_0);//初始化PE1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                    GPIO_Init(GPIOE,&GPIO_InitStructure);GPIO_ResetBits(GPIOE,GPIO_Pin_1);
}

从LED的电路图中可以看出,LED正向接3.3V的电压,所以当每个LED对应的GPIO端口接低电平时,二极管正向导通。
主程序源代码

#include "stm32f10x.h"
#include "delay.h"int main(void)
{ led_init();delay_init();while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_9);GPIO_SetBits(GPIOE,GPIO_Pin_1);delay_ms(500);GPIO_ResetBits(GPIOE,GPIO_Pin_0);GPIO_SetBits(GPIOB,GPIO_Pin_9);delay_ms(500);GPIO_ResetBits(GPIOE,GPIO_Pin_1);GPIO_SetBits(GPIOE,GPIO_Pin_0);delay_ms(500);}
}

当程序下载好后便可以看到三个LED灯交替闪烁。

这便是我们对GPIO端口的一个初步了解,简单熟悉了其功能和用法,但是我们也能发现,如果用这样的方法编程,会让整个程序变得非常臃肿且不易读。那么接下来我们将继续修改优化我们的程序

3.程序结构

3.1文件的建立

和C语言中一样,我们可以通过调用函数来让我们的主程序显得更加简洁,接下来我们就继续学习如何编写程序结构。
首先在HARDWARE文件夹中新建两个txt文件,并分别修改为led.c和led.h并另存为UTF-8编码的文件。
然后在keil中将“led.c”添加到HARDWARE中

接下来我们开始编写led.c文件
首先我们需要先添加一下C语言的环境,我们需要在添加“HARDWARE”文件夹

3.2程序结构源代码

接下来,打开我们的“led.c”文件,将前文中的void led_nit()函数复制过来,并添加头文件

#include "led.h"
#include "stm32f10x.h"

接下来我们需要编写头文件,根据系统函数头文件中的定义
PEout(X)为对应的GPIO接口的输出。

#ifndef _LED_H
#define _LED_H#include "sys.h"//定义LED端口的输出
#define LED1 PEout(1)
#define LED2 PEout(0)
#define LED3 PBout(9)void led_init();#endif

接下来我们编写主程序

#include "stm32f10x.h"
#include "delay.h"
#include "led.h"//编写的LED头文件int main(void)
{led_init();//LED初始化函数delay_init();//延时函数while(1){LED1 = 0;//当LED1对应的端口为0时,二极管正向导通LED3 = 1;delay_ms(500);LED2 = 0;LED1 = 1;delay_ms(500);LED3 = 0;LED2 = 1;delay_ms(500);}return 0;
}

由此我们便对之前的程序通过函数调用的方式使整个程序变得更加简洁、容错率更高、程序更加易读。

但是此时我们发现每次需要更改LED灯的状态,都需要修改程序,并重新进行下载,下一次,我们将继续学习,怎样用按键来控制LED灯的状态。

单片机STM32入门——(1)程序结构相关推荐

  1. 单片机c语言程序结构,科学网—单片机C语言-程序结构 - 李飞的博文

    单片机C语言-程序结构 已有 651 次阅读 2011-3-30 22:29 |系统分类:科研笔记 先来复杂说说C言语的标识符和关键字. 标识符是用来标识源程序中某个对象的名字的, 可以写做" ...

  2. 简单的stm32入门小程序(交通信号灯)STM32F103C8T6

    1.用STM32CubeMX创建工程,通过图形化界面配置GPIO引脚. project manager按照下图选择 勾选仅拷贝使用的库文件,外设初始化代码单独放到C或H文件 2.用KEIL打开生成的工 ...

  3. 单片机c语言三种经典程序结构,单片机C语言程序的结构和设计精选.docx

    单片机C语言程序的结构和设计精选 实验五 单片机C语言程序的结构和设计一.实验目的1. 掌握单片机C语言的程序结构:2. 掌握单片机C语言程序的编写和调试方法:3. 掌握MSP430FG2553基本I ...

  4. 【STM32入门100步--学习笔记】USART串口接收程序(含教学视频)

    STM32串口接收的程序和8051单片机一样,有2种接收方式:中断处理和查询方式. 试过两种方式之后发现,中断处理方式更方便,可以扩展多个数据的接收.推荐中断方式. 我已经将本资料内容整理后录制了视频 ...

  5. 如何用c语言编写stm32的程序吗,STM32入门C语言详解

    <STM32入门C语言详解>由会员分享,可在线阅读,更多相关<STM32入门C语言详解(6页珍藏版)>请在人人文库网上搜索. 1.最新 料推荐阅读 flash : 芯片内部存储 ...

  6. 《嵌入式C编程:PIC单片机和C编程技术与应用》一第1章C语言概述和程序结构1.1 C源代码...

    本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第1章,第1.1节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问云栖社 ...

  7. GTK+编程入门(2)—GTK+程序结构

    GTK+编程入门(2)-GTK+程序结构(2015-7-23) 分类:GTK+   现在是晚上,快到睡觉时间了.把这小节完整看完是不可能了,索性就先开个头.这节的内容是通过一个最简单的GTK+程序的分 ...

  8. 单片机 stm32 差分升级 增量升级算法源码, 纯c编写跨平因为是程序源码

    单片机 stm32 差分升级 增量升级算法源码, 纯c编写跨平因为是程序源码 IAP升级 OTA升级 物联网 车联网 适用 YID:83500653978935134Deflag

  9. 单片机 stm32 差分升级 增量升级算法源码,纯c编写跨平因为是程序源码

    单片机 stm32 差分升级 增量升级算法源码,纯c编写跨平因为是程序源码 IAP升级 OTA升级 物联网 车联网 适用 现有:69500653978935134Deflag

最新文章

  1. Tomcat服务OTA发布J2ME应用(eclipse开发环境)
  2. timer定时器_拾遗Timer定时器
  3. Openlayers中点击地图获取坐标并输出
  4. Asp.net Core 2.1新功能Generic Host(通用主机)深度学习
  5. 201912-4 区块链(CCF CSP认证)
  6. 猎洞高手Orange Tsai 亲自讲解 ProxyShell write-up
  7. sql 只要一个字段相同则只显示一条数据_sql 有一个字段内容重复的 只显示一条的方法...
  8. 计算机 开机硬盘灯一直亮,硬盘灯一直亮,教您电脑硬盘指示灯一直亮怎么办
  9. FPS游戏:实现GDI方框透视
  10. 澳洲PHP工作,怀爱伦澳洲行_在新西兰的工作
  11. 开维控制精灵 Ctrl js 快手小游戏 - 自动消砖块
  12. linux下tomcat查看端口
  13. 【Educoder作业】CC++指针实训
  14. lamp 架构的搭建
  15. firefox如何卸载插件plugins和临时文件夹
  16. 机器学习新手十大算法
  17. 3D人脸模型建模工具,用于人脸建模,3DMM系数匹配
  18. Java编程语言是什么 JAVA有什么优势
  19. 北大青鸟帮助你实现IT人梦想
  20. klouderr什么意思_tackle是什么意思_tackle的翻译_音标_读音_用法_例句_爱词霸在线词典...

热门文章

  1. js复制本地文件(单条和批量)
  2. IPsec:IKEv1和IKEv2区别
  3. 腾讯会议APP——新手PRD文档
  4. SAP ABAP 我的文章合集:ABAP and Excel
  5. 利用osg::ClipPlane 对节点进行多边形裁切
  6. Kafka学习整理三(borker(0.9.0及0.10.0)配置)
  7. C语言遍历文件目录:readdir,opendir
  8. 【解读】山香科技:互联网从软件革命到移动革命
  9. python-赫-day02
  10. 写一个求平方根的函数求一个整数的平方根因为函数类型是整形所以平方根的结果是整数,例如5,的平方根是2,而不是2.3...