当前位置: 首页 > news >正文

stm32单片机个人学习笔记3(GPIO输出)

前言

本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

一、GPIO简介

二、GPIO基本结构

 三、GPIO位结构

施密特触发器的原理 

红线是输入电平,蓝线是整流后的电平,绿线是上限和下限

当波形越过上限或下限时,电平才会发生改变,假如只在下限周围上下浮动是电平是不会发生变化的 

位设置/清除寄存器的使用原理 :如果要在某位上置1,而其它位保持不变,就在位设置寄存器中,给这对应位置1,其它位置0,这样这个位就会被置为1,其它位不变,省去了C语言&=和|=复杂繁琐的操作;置0则在位清除寄存器置1即可,其它置0的保持不变。

推挽:两个MOS管均起作用,输出给1时,P-MOS导通,N-MOS截止,输出高电平;输出给0时,P-MOS截止,N-MOS导通,输出低电平,此时高低电平均有驱动能力。

开漏:P-MOS管不起作用,只有N-MOS管有用, 输出给1时,N-MOS截止,输出高电平;输出给0时,N-MOS导通,输出低电平,此时高电平没有驱动能力,只有低电平有驱动能力,主要应用于总线挂载多个设备是防止多个设备的互相干扰或者可以在IO口配置一个上拉电阻,输出0时,N-MOS导通,输出低电平,而输出1时,N-MOS截止,IO口的上拉电阻可以将IO口拉至5V来驱动电路。

关闭:当引脚配置为输入模式时,两个MOS均关闭,不起输出作用。

四、GPIO模式

 只输入,输出开关是断开的,而输出的时候,输入也是可以进来的,除了模拟输入会关闭数字输入的功能,其它七个模式输入都是有效的。

五、硬件电路

上面两个图是低电平导通,高电平截止

下面两个图是高电平导通,低电平截止 

六、实例一(LED闪烁)

1. 接线图

2. 代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{//启动时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//初始化GPIO口GPIO_InitTypeDef GPIO_InitStructure;					GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);while (1){//写入数据,输出GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);Delay_ms(500);}
}

七、实例二(LED流水灯)

1.接线图

2.代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);while (1){GPIO_Write(GPIOA, ~0x0001);		//0000 0000 0000 0001Delay_ms(50);GPIO_Write(GPIOA, ~0x0002);		//0000 0000 0000 0010Delay_ms(50);GPIO_Write(GPIOA, ~0x0004);		//0000 0000 0000 0100Delay_ms(50);GPIO_Write(GPIOA, ~0x0008);		//0000 0000 0000 1000Delay_ms(50);GPIO_Write(GPIOA, ~0x0010);		//0000 0000 0001 0000Delay_ms(50);GPIO_Write(GPIOA, ~0x0020);		//0000 0000 0010 0000Delay_ms(50);GPIO_Write(GPIOA, ~0x0040);		//0000 0000 0100 0000Delay_ms(50);GPIO_Write(GPIOA, ~0x0080);		//0000 0000 1000 0000Delay_ms(50);}
}

八、实例三(蜂鸣器)

1.接线图

2.代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);while (1){GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);Delay_ms(100);GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);Delay_ms(100);GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);Delay_ms(100);GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);Delay_ms(700);}
}

 其为有源蜂鸣器,给低电平就会响

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何进行DAP-seq的数据挖掘,筛选验证位点
  • 《OpenCV计算机视觉》—— 图像金字塔
  • Unity的Button组件进行扩展
  • C++:模板开端
  • Python 全栈系列271 微服务踩坑记
  • 什么是 SMB 服务器以及它如何工作?
  • AI论文精读笔记-Generative Adversarial Nets(GAN)
  • YOLOv5改进 | 模块缝合 | C3 融合RFAConv和CBAM注意力机制 【二次融合 小白必备】
  • GANs-生成对抗网络
  • 第二期: 第二节 , 裸机编程 , gpio
  • 基于python+django+vue的鲜花商城系统
  • kafka mirror maker之实现两个kafka集群之间的数据同步
  • freeRTOS 任务的创建、挂起、恢复
  • 使用PyTorch进行图像风格迁移:基于VGG19实现
  • 多目标优化算法求解LSMOP(Large-Scale Multi-Objective Optimization Problem)测试集,MATLAB代码
  • [Vue CLI 3] 配置解析之 css.extract
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • canvas 高仿 Apple Watch 表盘
  • docker python 配置
  • HTML中设置input等文本框为不可操作
  • laravel5.5 视图共享数据
  • mysql 数据库四种事务隔离级别
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python进阶细节
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 猴子数据域名防封接口降低小说被封的风险
  • 机器学习学习笔记一
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 解决iview多表头动态更改列元素发生的错误
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 三栏布局总结
  • 我的zsh配置, 2019最新方案
  • 携程小程序初体验
  • 赢得Docker挑战最佳实践
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​如何在iOS手机上查看应用日志
  • # Maven错误Error executing Maven
  • #APPINVENTOR学习记录
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • %@ page import=%的用法
  • (1)(1.11) SiK Radio v2(一)
  • (10)ATF MMU转换表
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (学习总结16)C++模版2
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)