1、GPIO硬件结构图:

2、GPIO程序结构:

3、框架介绍:

  • 这里的ASM是固定启动文件夹,startup_stm32f10x_hd.s表示当前stm32类型为高容量设备,当然还有md.s等。
  • CMSYS文件夹下的两个文件是固定的,不用管。
  • FWlib是工程中要用到的设备的文件,因为这里要用到GPIO和时钟使能所以用到了stm32f10x_gpio.c和stm32f10x_rcc.c文件,如果是其他工程要相应加入所需文件。
  • USR中的main.c就是主程序文件,我们要在里面写相应功能,其他文件一般不用修改,直接引用就好。

4、代码片段解析:

4.1 引入函数

  1. #include "stm32f10x.h"

这个是用户文件中唯一要包含和修改的库函数!除此之外我们还要把文件stm32f10x_conf.h做相应修改:(如第二行注释所示就是使能你FWlib中引入的文件,这个非常重要,一定不要少了)

  1. /* Includes ------------------------------------------------------------------*/
  2. /* Uncomment the line below to enable peripheral header file inclusion */
  3. /* #include "stm32f10x_adc.h" */
  4. /* #include "stm32f10x_bkp.h" */
  5. /* #include "stm32f10x_can.h" */
  6. /* #include "stm32f10x_crc.h" */
  7. /* #include "stm32f10x_dac.h" */
  8. /* #include "stm32f10x_dbgmcu.h" */
  9. /* #include "stm32f10x_dma.h" */
  10. /* #include "stm32f10x_exti.h" */
  11. /* #include "stm32f10x_flash.h" */
  12. /* #include "stm32f10x_fsmc.h" */
  13. #include "stm32f10x_gpio.h"
  14. /* #include "stm32f10x_i2c.h" */
  15. /* #include "stm32f10x_iwdg.h" */
  16. /* #include "stm32f10x_pwr.h" */
  17. #include "stm32f10x_rcc.h"
  18. /* #include "stm32f10x_rtc.h" */
  19. /* #include "stm32f10x_sdio.h" */
  20. /* #include "stm32f10x_spi.h" */
  21. /* #include "stm32f10x_tim.h" */
  22. /* #include "stm32f10x_usart.h" */
  23. /* #include "stm32f10x_wwdg.h" */
  24. /* #include "misc.h" */ /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */

4.2 端口宏定义

  1. #define LED1_ON GPIO_SetBits(GPIOB, GPIO_Pin_8);
  2. #define LED1_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_8);
  3.  
  4. #define LED2_ON GPIO_SetBits(GPIOD, GPIO_Pin_6);
  5. #define LED2_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_6);
  6.  
  7. #define LED3_ON GPIO_SetBits(GPIOD, GPIO_Pin_3);
  8. #define LED3_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_3);

这里就是宏定义PB8、PD6、PD3三个端口输出高低电平,这样在这3个端口接上LED就能通过给高低电平控制灯的亮灭。

4.3 系统时钟使能函数

  1. void RCC_Configuration(void)
  2. {
  3. SystemInit();
  4. }

这里函数是RCC初始化,这里只调用库函数初始化了系统时钟72Mhz

4.4 GPIO初始化函数

  1. void LED_Config(void){
  2. GPIO_InitTypeDef GPIO_InitStructure;
  3.  
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);
  5. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED1 V6 //将V6,V7,V8 配置为通用推挽输出
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  7. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口线翻转速度为50MHz
  8. GPIO_Init(GPIOB, &GPIO_InitStructure);
  9.  
  10. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3; //LED2, LED3 V7 V8
  11. GPIO_Init(GPIOD, &GPIO_InitStructure);
  12. }

这里是GPIO的初始化函数,第二行是定义一个GPIO初始化结构体,第四行是使能GPIOB和GPIOD的时钟,第5-7行是对GPIO初始化结构体信息的填充,要根据所需GPIO的不同属性进行设置,第8行是调用库函数GPIO_Init()对GPIOB8进行初始化,采用结构体的信息,同样的道理,来初始化GPIOD6和D3.

4.5 简单延时函数

  1. void Delay(__IO uint32_t nCount)
  2. {
  3. for(; nCount != ; nCount--);
  4. }

4.6 主程序

  1. int main(void)
  2. {
  3. RCC_Configuration(); //系统时钟配置
  4. LED_Config(); //LED控制配置
  5. while ()
  6. {
  7. LED1_ON; LED2_OFF; LED3_OFF; //LED1亮 LED2,LED3灭(LED2,LED3 仅V3,V2,V2.1板有)
  8. Delay(0xAFFFF);
  9. LED1_OFF; LED2_ON; LED3_OFF; //LED2亮 LED1,LED3灭(LED2,LED3 仅V3,V2,V2.1板有)
  10. Delay(0xAFFFF);
  11. LED1_OFF; LED2_OFF; LED3_ON; //LED3亮 LED1,LED2灭(LED2,LED3 仅V3,V2,V2.1板有)
  12. Delay(0xAFFFF);
  13. }
  14. }

代码链接(stm32f103VE):http://pan.baidu.com/s/1jGolNO6

[stm32] GPIO及最小框架的更多相关文章

  1. 03、NetCore2.0下Web应用之搭建最小框架

    03.NetCore2.0下Web应用之搭建最小框架 这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的 ...

  2. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...

  3. STM32 GPIO外部中断总结

    一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...

  4. 【STM32】STM32 GPIO模式理解

    stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入: 2. 浮空输入: 3. 上拉输入: 4. 下拉输入: 5. 开漏输出: 6. 推挽输出: 7. 复用开漏输出: 8. 复用推挽输出 如 ...

  5. STM32 GPIO fast data transfer with DMA

    AN2548 -- 使用 STM32F101xx 和 STM32F103xx 的 DMA 控制器 DMA控制器 DMA是AMBA的先进高性能总线(AHB)上的设备,它有2个AHB端口: 一个是从端口, ...

  6. stm32软件编程的框架及注意事项——rtos篇

    0.通常,嵌入式软件(这里指单片机系统)的框架千变万化,有带rtos的,也有裸机的. 0.1.写过带系统的,也写过裸机的,这里总结一下两个类型的框架,记录下自己的心得,主要是文字描述,框架图可以后期添 ...

  7. STM32 GPIO相关

    1. STM32 的 IO 作为输入的时候,可以程序设置上下拉电阻(可以不用外接上下拉电阻). 2.GPIO有四种输入模式:浮空输入.上拉输入.下拉输入.模拟输入: 3.GPIO有四种输出模式:开漏输 ...

  8. STM32 GPIO输入输出(基于HAL库)

    一.基础认识 GPIO全名为General Purpose Input Output,即通用输入输出.有时候简称为"IO口".通用,说明它是常见的.输入输出,就是说既能当输入口使用 ...

  9. [direct-X] direct-X最小框架

    #include<d3d9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.l ...

随机推荐

  1. artDialog测试

    artDialog测试 <script src="../Content/artDialog/v4/artDialog.source.js?skin=default">& ...

  2. Android permission

    1. users-permission Users-permission is the permission that this app should acquire, so that the app ...

  3. IOS-Appium 自动化测试——环境配置及模拟器、真机跑测试

    在MAC环境下配置IOS的appium的自动化测试环境,主要包含三个部分: 一.环境配置 1.安装homebrew(homebrew可以提供MAC OS无法提供的很多套件) ruby -e " ...

  4. c# SqlHelper Class

    using System;using System.Collections;using System.Collections.Generic;using System.Data;using Syste ...

  5. 如何在MAC上使用SVN,简单几行命令搞定

    如果你要使用SVN管理代码,如果不是迫不得已,还是看看git吧,但是SVN也要知道怎么用,原理是相似的. 首先,要准备的东西:svnX软件 https://pan.baidu.com/s/1mhEay ...

  6. LightOJ 1094 - Farthest Nodes in a Tree(树的直径)

    http://acm.hust.edu.cn/vjudge/contest/121398#problem/H 不是特别理解,今天第一次碰到这种问题.给个链接看大神的解释吧 http://www.cnb ...

  7. (转)ajax.dll,ajaxpro.dll的区别和用法

    ASP.NET AjaxPro的应用 1.首先下载AjaxPro组件.并将AjaxPro.dll引用到网站(或项目). 2.修改Web.config.在 <system.web> 元素中添 ...

  8. sd_cms置顶新闻,背景颜色突击显示

    维护之前的一个客户网站,使用的是sd_cms系统,因为好久没有维护了,看到这网站的时候,真不敢相信,自己也曾做出过这样的网站. 客户要求置顶新闻始终在最上面,有背景颜色突击显示. 找到对应的代码,修改 ...

  9. 实现的一个ajax请求组件 有加载效果

    var zhanglei_Ajax = function(url,data,fn){ var str = '<div class="mask" style="pos ...

  10. iOS字符串为空的判断

    //判断字符串 -(BOOL) isValidString:(id)input { if (!input) { return NO; } if ((NSNull *)input == [NSNull ...