[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 ...
随机推荐
- artDialog测试
artDialog测试 <script src="../Content/artDialog/v4/artDialog.source.js?skin=default">& ...
- Android permission
1. users-permission Users-permission is the permission that this app should acquire, so that the app ...
- IOS-Appium 自动化测试——环境配置及模拟器、真机跑测试
在MAC环境下配置IOS的appium的自动化测试环境,主要包含三个部分: 一.环境配置 1.安装homebrew(homebrew可以提供MAC OS无法提供的很多套件) ruby -e " ...
- c# SqlHelper Class
using System;using System.Collections;using System.Collections.Generic;using System.Data;using Syste ...
- 如何在MAC上使用SVN,简单几行命令搞定
如果你要使用SVN管理代码,如果不是迫不得已,还是看看git吧,但是SVN也要知道怎么用,原理是相似的. 首先,要准备的东西:svnX软件 https://pan.baidu.com/s/1mhEay ...
- LightOJ 1094 - Farthest Nodes in a Tree(树的直径)
http://acm.hust.edu.cn/vjudge/contest/121398#problem/H 不是特别理解,今天第一次碰到这种问题.给个链接看大神的解释吧 http://www.cnb ...
- (转)ajax.dll,ajaxpro.dll的区别和用法
ASP.NET AjaxPro的应用 1.首先下载AjaxPro组件.并将AjaxPro.dll引用到网站(或项目). 2.修改Web.config.在 <system.web> 元素中添 ...
- sd_cms置顶新闻,背景颜色突击显示
维护之前的一个客户网站,使用的是sd_cms系统,因为好久没有维护了,看到这网站的时候,真不敢相信,自己也曾做出过这样的网站. 客户要求置顶新闻始终在最上面,有背景颜色突击显示. 找到对应的代码,修改 ...
- 实现的一个ajax请求组件 有加载效果
var zhanglei_Ajax = function(url,data,fn){ var str = '<div class="mask" style="pos ...
- iOS字符串为空的判断
//判断字符串 -(BOOL) isValidString:(id)input { if (!input) { return NO; } if ((NSNull *)input == [NSNull ...