[stm32] GPIO及最小框架
1、GPIO硬件结构图:

2、GPIO程序结构:

3、框架介绍:

|
4、代码片段解析:
4.1 引入函数
#include "stm32f10x.h"
这个是用户文件中唯一要包含和修改的库函数!除此之外我们还要把文件stm32f10x_conf.h做相应修改:(如第二行注释所示就是使能你FWlib中引入的文件,这个非常重要,一定不要少了)
/* Includes ------------------------------------------------------------------*/
/* Uncomment the line below to enable peripheral header file inclusion */
/* #include "stm32f10x_adc.h" */
/* #include "stm32f10x_bkp.h" */
/* #include "stm32f10x_can.h" */
/* #include "stm32f10x_crc.h" */
/* #include "stm32f10x_dac.h" */
/* #include "stm32f10x_dbgmcu.h" */
/* #include "stm32f10x_dma.h" */
/* #include "stm32f10x_exti.h" */
/* #include "stm32f10x_flash.h" */
/* #include "stm32f10x_fsmc.h" */
#include "stm32f10x_gpio.h"
/* #include "stm32f10x_i2c.h" */
/* #include "stm32f10x_iwdg.h" */
/* #include "stm32f10x_pwr.h" */
#include "stm32f10x_rcc.h"
/* #include "stm32f10x_rtc.h" */
/* #include "stm32f10x_sdio.h" */
/* #include "stm32f10x_spi.h" */
/* #include "stm32f10x_tim.h" */
/* #include "stm32f10x_usart.h" */
/* #include "stm32f10x_wwdg.h" */
/* #include "misc.h" */ /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
4.2 端口宏定义
#define LED1_ON GPIO_SetBits(GPIOB, GPIO_Pin_8);
#define LED1_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_8); #define LED2_ON GPIO_SetBits(GPIOD, GPIO_Pin_6);
#define LED2_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_6); #define LED3_ON GPIO_SetBits(GPIOD, GPIO_Pin_3);
#define LED3_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_3);
这里就是宏定义PB8、PD6、PD3三个端口输出高低电平,这样在这3个端口接上LED就能通过给高低电平控制灯的亮灭。
4.3 系统时钟使能函数
void RCC_Configuration(void)
{
SystemInit();
}
这里函数是RCC初始化,这里只调用库函数初始化了系统时钟72Mhz
4.4 GPIO初始化函数
void LED_Config(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED1 V6 //将V6,V7,V8 配置为通用推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口线翻转速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3; //LED2, LED3 V7 V8
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
这里是GPIO的初始化函数,第二行是定义一个GPIO初始化结构体,第四行是使能GPIOB和GPIOD的时钟,第5-7行是对GPIO初始化结构体信息的填充,要根据所需GPIO的不同属性进行设置,第8行是调用库函数GPIO_Init()对GPIOB8进行初始化,采用结构体的信息,同样的道理,来初始化GPIOD6和D3.
4.5 简单延时函数
void Delay(__IO uint32_t nCount)
{
for(; nCount != ; nCount--);
}
4.6 主程序
int main(void)
{
RCC_Configuration(); //系统时钟配置
LED_Config(); //LED控制配置
while ()
{
LED1_ON; LED2_OFF; LED3_OFF; //LED1亮 LED2,LED3灭(LED2,LED3 仅V3,V2,V2.1板有)
Delay(0xAFFFF);
LED1_OFF; LED2_ON; LED3_OFF; //LED2亮 LED1,LED3灭(LED2,LED3 仅V3,V2,V2.1板有)
Delay(0xAFFFF);
LED1_OFF; LED2_OFF; LED3_ON; //LED3亮 LED1,LED2灭(LED2,LED3 仅V3,V2,V2.1板有)
Delay(0xAFFFF);
}
}
代码链接(stm32f103VE):http://pan.baidu.com/s/1jGolNO6
[stm32] GPIO及最小框架的更多相关文章
- 03、NetCore2.0下Web应用之搭建最小框架
03.NetCore2.0下Web应用之搭建最小框架 这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的 ...
- STM32 GPIO 配置之ODR, BSRR, BRR 详解
STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...
- STM32 GPIO外部中断总结
一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...
- 【STM32】STM32 GPIO模式理解
stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入: 2. 浮空输入: 3. 上拉输入: 4. 下拉输入: 5. 开漏输出: 6. 推挽输出: 7. 复用开漏输出: 8. 复用推挽输出 如 ...
- STM32 GPIO fast data transfer with DMA
AN2548 -- 使用 STM32F101xx 和 STM32F103xx 的 DMA 控制器 DMA控制器 DMA是AMBA的先进高性能总线(AHB)上的设备,它有2个AHB端口: 一个是从端口, ...
- stm32软件编程的框架及注意事项——rtos篇
0.通常,嵌入式软件(这里指单片机系统)的框架千变万化,有带rtos的,也有裸机的. 0.1.写过带系统的,也写过裸机的,这里总结一下两个类型的框架,记录下自己的心得,主要是文字描述,框架图可以后期添 ...
- STM32 GPIO相关
1. STM32 的 IO 作为输入的时候,可以程序设置上下拉电阻(可以不用外接上下拉电阻). 2.GPIO有四种输入模式:浮空输入.上拉输入.下拉输入.模拟输入: 3.GPIO有四种输出模式:开漏输 ...
- STM32 GPIO输入输出(基于HAL库)
一.基础认识 GPIO全名为General Purpose Input Output,即通用输入输出.有时候简称为"IO口".通用,说明它是常见的.输入输出,就是说既能当输入口使用 ...
- [direct-X] direct-X最小框架
#include<d3d9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.l ...
随机推荐
- Elasticsearch 插件安装
http://www.cnblogs.com/richaaaard/p/5212044.html
- Echarts data数据为空时,显示“-”
{ name:'2007', type:'bar', data:["","",""]} 解决办法: 写成data:["" ...
- [2015hdu多校联赛补题]hdu5303 Delicious Apples
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 题意:在一个长为L的环形路径上种着一些苹果树,告诉你苹果树的位置(题目中以0~L指示坐标)及苹果 ...
- sendEmail的使用
坑!坑!坑!今天又弄了一天如何发送邮件,首先用sendmail,postfix.....等,都试过了,各种报错,然后就从早上弄到现在,在群里问问题的时候,一位好心的大哥说了他用的是sendEmail, ...
- poj 2536 Gopher II (二分匹配)
Gopher II Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6345 Accepted: 2599 Descrip ...
- 今天想用jquery来实现div的拖放功能
html5标签.拖放(Drag 和 drop)是 HTML5 标准的组成部分. 步骤一:首先设置标签可以被拖 draggable="true" 步骤二:选取被拖的标签,和要放置被拖 ...
- poj练习题的方法
poj1010--邮票问题 DFSpoj1011--Sticks dfs + 剪枝poj1020--拼蛋糕poj1054--The Troublesome Frogpoj1062--昂贵的聘礼poj1 ...
- UIView.FRAMEWORK
uiview .framework 有太多 属性到现在基本上没怎么接触,今天开始用到了就纪录一下,有空在去了解了: [self.view bringToFront:btn] 把btn 放到self.v ...
- 3163: [Heoi2013]Eden的新背包问题
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
- 如何查看MySQL执行计划
在介绍怎么查看MySQL执行计划前,我们先来看个后面会提到的名词解释: 覆盖索引: MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件 包含所有满足查询需要的数据的索引 ...