上一节我们用Keil建好了工程模板,接下来就是喜闻乐见的点灯环节了。

本节内容和使用STM32一模一样

一.先打开寄存器手册看下GPIO外设寄存器

芯片寄存器手册链接如下:

https://cdn.openluat-luatcommunity.openluat.com/attachment/20230907152950811_Air32F103xx_User_Manual_CN-%E5%B8%A6%E7%9B%AE%E5%BD%95%E4%B9%A6%E7%AD%BE.pdfhttps://cdn.openluat-luatcommunity.openluat.com/attachment/20230907152950811_Air32F103xx_User_Manual_CN-%E5%B8%A6%E7%9B%AE%E5%BD%95%E4%B9%A6%E7%AD%BE.pdf翻到P67,第8章,通用和复用功能I/O(GPIO和AFIO)

熟悉的配方,熟悉的味道;用到的寄存器有:

1. IO口配置寄存器 :GPIOx_CRL &  GPIOx_CRH  - 用来设置IO是输入还是输出,具体是啥类型

2. IO口(观察输入输出)数据寄存器:GPIOx_IDR & GPIOx_ODR - 看输入输出是0还是1(常用来接收数据)

3. IO口置位/复位寄存器(32位):GPIOx_BSRR - 用来对某一个IO口输出1或0

4. IO口复位寄存器(16位,高16位无用reserved):GPIOx_BRR - 用于对某1个IO口清0 ,这个和上面的区别是,这个只能清0,上面那个还能置1。

会前三个就可以了,多了记不住,也不一定能用得上是吧。

但是,合宙的这个Air32F103和STM32F103的区别是,它内部有独立上/下拉控制寄存器

这个有点意思了。是不是意味着我们可以在省掉外部上下拉电阻了呢?阻值有40K。我们后面I2C章节验证下。

对应寄存器手册:8.2.88GPIO强制上下拉配置寄存器(GPIOx_PU_PD_EN) (x=A..E)和8.2.9,GPIO强制上下拉锁定寄存器(GPIOx_PU_PD_LCKR) (x=A..E)

这2个寄存器在STM32F103上是没有的,因为STM32的上下拉是根据配置自动设置,合宙可以在此基础上强制打开。

不管了,先把灯弄亮再说

二. 操作GPIO的步骤:

1. 开时钟,即配置RCC时钟寄存器

2. 配置GPIO口工作模式

3. 设置GPIO口工作电平

1. 开始对应外设时钟

咱们这小节,先不研究RCC,先把时钟复制下,第3小节开始正式介绍RCC。把APB2打开。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

2.配置GPIO口的工作模式

咱们亮蓝灯(蓝灯好看,亮一点doge),需要操作GPIOB_Pin10,给高电平时,IO驱动LED点亮。

    GPIO_InitTypeDef GPIO_InitiateStructure; //这句写在RCC前面,要不会报错,可能和我的MDK版本有关RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //这句上面讲过了,别复制重复了GPIO_InitiateStructure.GPIO_Mode=GPIO_Mode_Out_PP;//复用推挽输出GPIO_InitiateStructure.GPIO_Pin=GPIO_Pin_10; //选Pin10GPIO_InitiateStructure.GPIO_Speed=GPIO_Speed_50MHz; //输出速度,默认选50MGPIO_Init(GPIOB, &GPIO_InitiateStructure); 

关于GPIO的工作模式可以看寄存器手册P73页,有官方建议对应工作模式的GPIO配置方式。

这部分建议看江科大的STM32讲解,简单易懂。

3. 让IO口输出高电平

用到了库函数:GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)

* @brief  Sets or clears the selected data port bit. 将IO口置位(1)或清除(0)
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.参数1:可以是GPIOA/GPIOB/GPIOC/GBIOD/GPIOE/GPIOE/GPIOF/GPIOG
  * @param  GPIO_Pin: specifies the port bit to be written.
  *   This parameter can be one of GPIO_Pin_x where x can be (0..15).参数2:可以是GPIO_Pin_0 到GPIO_Pin_15
  * @param  BitVal: specifies the value to be written to the selected bit.
  *   This parameter can be one of the BitAction enum values:参数3:GPIO的值 ,这里用了个枚举
  *     @arg Bit_RESET: to clear the port pin 清零(0)
  *     @arg Bit_SET: to set the port pin 置位(1)
  * @retval None 无返回值

GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_SET);

编译,下载,在Debug里记得把连接后重启勾上,要不得手动按下复位键才能看到灯亮

灯亮,搞定~抽根烟歇会


Air32F103学习笔记-2.控制GPIO (一灯大师驾到)相关推荐

  1. Java学习笔记——流程控制

    Java学习笔记--流程控制 Day05 一.用户交互Scanner 1.Scanner对象 我们通过Java工具包java.util.Scanner中的Scanner类来获取用户的输入 基本语法:S ...

  2. 【STM32学习笔记】#002 GPIO设置练习

    系列文章目录 -[STM32学习笔记]#001 前期准备 文章目录 系列文章目录 前言 一.目标功能 二.CubeMX设置 1 端口设置1(Port Setting) 2 端口设置2(Port Set ...

  3. Vue.js 学习笔记 七 控制样式

    Vue.js可以灵活的控制样式 我们首先随便写2个样式 <style>.divCss {background-color: green;width:400px;height:400px;} ...

  4. matlab学习笔记3(控制系统仿真)

    matlab学习笔记3(控制系统仿真) 1.典型二阶系统 H ( S ) = ω n 2 S 2 + 2 ξ ω n S + ω n 2 H\left(S\right)=\frac{\omega_n^ ...

  5. Spring.NET学习笔记1——控制反转(基础篇) Level 200

    在学习Spring.NET这个控制反转(IoC)和面向切面(AOP)的容器框架之前,我们先来看一下什么是控制反转(IoC). 控制反转(Inversion of Control,英文缩写为IoC),也 ...

  6. IAR FOR STM8 学习笔记 固件库 GPIO

    经过一番挣扎,还是决定使用官方的固件库了.. 从网上下一个STM8S的固件库,记得是FOR IAR的. 找到里面的IAR模板就可以开始用了. 这些都是直接写好的库函数,可以直接调用,但首先得先读懂,先 ...

  7. 电机学习笔记 无刷电机控制6步换相

    无刷电机 无刷电机知识 KV 值 有刷直流电机是根据额定工作电压来标注额定转速的,无刷电机引入了 KV 值的概念,而让用 户可以直观的知道无刷电机在具体的工作电压下的具体转速.实际转速 =KV 值 * ...

  8. gpb编码 c语言,ARM学习笔记--GPIO接口

    GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平. S3C2410 ...

  9. stm32f103 GPIO——一灯大师之I/O口输出模式的寄存器配置

    在讲述寄存器配置之前,我们先来看看二进制中,在不改变其他位的条件下,对某个位的置1和清零. 先看口诀: 清零用&            (对某一位,进行"与"操作.与0相与 ...

  10. Python学习笔记——流程控制(拉勾教育数据分析实战训练营学习笔记)

    流程控制 1 程序结构 顺序结构 ​ 按编写顺序依次执行 选择结构 ​ 根据条件选择的结果,选择执行不同的语句 循环结构 ​ 在一定条件下,反复执行某段程序 2 选择语句 2.1 if语句 语法规则 ...

最新文章

  1. 奇葩错误:cv.imread()读取失败
  2. mysql元数据死锁日志_这个未修复的MySQL 5.7死锁Bug,你知道么?
  3. 【精辟】人工智能先锋人物杰夫·辛顿说:“深度学习将无所不能”
  4. ext文件系统机制原理剖析
  5. Java类库及其组织结构(Java API)
  6. 【ADO.NET基础知识】SqlConnection、command、DataSet 、DataTable、dataAdapter
  7. Java网络爬虫实操(8)
  8. aws 堆栈模板_使用Arquillian和LocalStack脱机测试AWS云堆栈
  9. 【LeetCode笔记】416. 分割等和子集(Java、动态规划、背包问题、滚动数组)
  10. python24点4张扑克_Python实现扑克24点小游戏 ,从此我就没输过
  11. Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
  12. Node.js:Node基础
  13. 【Excel,遗忘密码后如何撤销工作表保护密码】
  14. 除了深度学习,机器翻译还需要啥?
  15. Share Creators公开课:游戏美术如何提升出海游戏转化
  16. 虚拟机安装panabit详细图解
  17. 写作活动第三期!让我们再挣200元稿费吧!
  18. 男孩子学计算机好不好,适合男孩学的专业 男生最吃香的专业
  19. visual studio安装进度条为零,检查网络链接;aka.ms拒绝连接,因为使用的HSTS...;无法访问github.com;外网无法访问
  20. “五小”成果技术报告 野外小队信息管理系统Ver1.00

热门文章

  1. bcb获取计算机名称,BCB图形识别_简单几何图形的识别和编辑毕业设计论文VC157
  2. Win 教程 Win7实现隔空投送
  3. 博途简单使用方法以及注意事项
  4. 人工智能算法基础:现代方法 Artificial Intelligence Algorithms: A Modern Approach
  5. Shopee菲律宾站推出#TatakPinoy虚拟贸易展
  6. 数据库基础知识汇总(二)
  7. cfr java_Java反编译工具CFR,Procyon简介
  8. 办公室自动化铵计算机,办公自动化介绍471821361.doc
  9. DeepinWine微信等软件如何升级
  10. 无法定位程序输入点 ucrtbase.terminate 于动态链接库 api-ms-win-crt-runtime-