01、【江科大自化协stm32F103c8t6】笔记之【入门32单片机及GPIO初始化参数配置】
目录
- 一、前言
- 二、必要资料
- 1、C语言类型
- 2、片上资源/外设
- 3、引脚定义
- 4、系统结构
- 三、GPIO初始化
- 1、首先使用RCC开启GPIO的时钟
- 2、其次使用GPIO_Init函数初始化GPIO
- 3、最后使用输入或输出的函数控制GPIO口
- 四、delay,oled函数的调用
- 1、delay
- 2、oled
一、前言
前几天系统地将32单片机学习了一下,学习的视频是bilibili的江科大自化协c8t6的教学,为了方便以后使用,在这里和b站视频联动写下一篇笔记,以便自己查阅资料和调用函数。
二、必要资料
1、C语言类型
- int在51单片机中是16位的,在STM32中32位的,如果要用16位的数据要用short来表示
- float和double都是带符号的,没有不带符号的
- 枚举enum的使用,类似于struct结构体,只是赋值且引用是有范围限制的
2、片上资源/外设
3、引脚定义
- 不要轻易使用PA15,PB3,PB4,他们是作为调试端口的
4、系统结构
性能:AHB>APB2>APB1(注意关注这三者里面的外设,其实后两者性能差不多)
三、GPIO初始化
1、首先使用RCC开启GPIO的时钟
从APB2总线,引出RCC_APB2PeriphClockCmd(GPIO口的名字,状态),如使GPIOA 使能:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
2、其次使用GPIO_Init函数初始化GPIO
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
第一个参数 GPIO_TypeDef* GPIOx 通过x选定GPIO, 如:GPIOA
第二个参数 GPIO_InitTypeDef* GPIO_InitStruct是GPIO的结构体地址 如:&GPIO_InitStructure
struct 关键字,定义结构体变量
用途:数据打包,不同类型的变量打包(可以数组,数组是同一个类型打包)#define 新名字 旧名字(无脑式定义)
typedef 旧名字 新名字(定义 长变量类型名);
因为结构体变量类型较长,所以通常用typedef更改变量类型名比如:
将结构体变量 struct{…} 换一个别名叫GPIO_InitTypeDef
我们把GPIO_InitTypeDef取个名字叫GPIO_InitStructure放到void GPIO_Init()上面并且在void GPIO_Init()中取地址&GPIO_InitStructure
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructurevoid GPIO_Init(GPIOA,GPIO_InitTypeDef* GPIO_InitStruct)
由上面struct{…}结构体知道GPIO_InitStructure 有三个参数分别用.引出:
(也可以用->直接指向结构体成员即可,就不必用*取地址和.引出结构体)
GPIO_InitStructure.GPIO_Mode
GPIO_InitStructure.GPIO_Pin
GPIO_InitStructure.GPIO_Speed
第一个Mode有8种模式
GPIO_Mode_AIN(Analog IN)//模拟输入
GPIO_Mode_IN_FLOATING //浮空输入
GPIO_Mode_IPD (In Pull Down) //下拉输入
GPIO_Mode_IPU (In Pull Up) //上拉输入
GPIO_Mode_OUT_OD(Out Open Drain) //开漏输出
GPIO_Mode_PP_OD(Out Push Pull) //推挽输出
GPIO_Mode_AF_OD(Atl Open Drain) //复用开漏
GPIO_Mode_AF_PP(Atl Push Pull) //复用推挽
- 开漏 高电平没有驱动能力
- 推挽 高低电平都有驱动能力
第二个GPIO_InitStructure.GPIO_Pin 的选择
第三个GPIO_InitStructure.GPIO_Speed的选择
我们一般选50MHz
最后结果如下:
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);
这样我们就把GPIOA 上所有引脚都初始化好了。
3、最后使用输入或输出的函数控制GPIO口
————————————————————————————————————————————————end
这里总共涉及了RCC和GPIO两个外设
★常用的三个RCC外设
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
★读写GPIO的8个函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
例1:
GPIO_SetBits : 拉高引脚输出电平 //1
GPIO_ResetBits :拉低引脚输出电平 //0
GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将PA0口置0Delay_ms(500);GPIO_SetBits(GPIOA, GPIO_Pin_0);//将PA0口置1Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//Bit_RESET设置低电平Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);//强制转换BitAction类型 0 1GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);Delay_ms(500);
例2:读取GPIO上 电平操作
GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);//读取PB13上引脚输入 一般是接一个按键 读它的输入 即是否按下
GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)//读取PA1上引脚输出 一般接光敏传感器 读它的AO口输出 即是否被遮挡
例3:灯的函数使用
//灯的打开
void LED1_ON(void)
{GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
//灯的熄灭
void LED1_OFF(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
//灯的翻转
void LED1_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0){GPIO_SetBits(GPIOA, GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA, GPIO_Pin_1);}
}
四、delay,oled函数的调用
1、delay
Delay_us();
Delay_ms();
Delay_s();
Delay.h
#ifndef __DELAY_H
#define __DELAY_Hvoid Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);#endif
2、oled
上述代码添加.c和.h文件后可以直接调用
01、【江科大自化协stm32F103c8t6】笔记之【入门32单片机及GPIO初始化参数配置】相关推荐
- 02、【江科大自化协stm32F103c8t6】笔记之【入门32单片机及EXTI外部中断初始化参数配置】
----------接着上一篇笔记写 四.返回值函数 五.EXTI外部中断 1.配置RCC 2.配置GPIO 3.配置AFIO 4.配置EXTI 5.配置NVIC 中断函数 四.返回值函数 uint8 ...
- 04、【江科大自化协stm32F103c8t6】笔记之【入门32单片机及利用TIM输出比较配置PWM】
----------接着上一篇笔记写 八.OC输出比较 九.PWM配置 1.RCC开启时钟 2.配置时基单元 3.配置输出比较单元 4.配置GPIO 5.运行控制 输出比较的函数介绍 十.重映射(重映 ...
- b站江科大自化协51单片机入门教程笔记(2)
文章目录 6-1 矩阵键盘 6-2 矩阵键盘密码锁 7-1 定时器 7-2 按键控制LED流水灯 & 定时器时钟 独立按键模块 定时器模块 8-1 串口通信 8-2 串口向电脑发送数据 &am ...
- b站江科大自化协51单片机入门教程笔记(1)
文章目录 1 综述 2-1 点亮一个LED 2-2 LED闪烁 2-3 LED流水灯 2-4 LED流水灯PLus 3-1 独立按键控制LED亮灭 3-2 独立按键控制LED状态 3-3 独立按键控制 ...
- 一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)
大家好,我是烟火.目前BMS软件工程师在职,利用自由时间,输出一些基础知识合集,一方面巩固,另一方面写博客作为成长记录. 人间清醒: 明明有能力可以变成更优秀的人 遇见更好的人 过更喜欢的生活 如果因 ...
- 17、江科大stm32视频学习笔记——USART串口协议和USART串口外设
目录 1.通信接口 2. 硬件电路 3.电平标准 4.串口参数及时序 5.USART简介 6.USART工作 (1)写操作 (2)读操作 (3)帧头和帧尾的添加和除由电路自动执行 (4)硬件数据控制流 ...
- 7、江科大stm32视频学习笔记——中断的应用:对射式红外传感器计次旋转编码器计次
目录 1.标志位函数 2. 初始化的中断的步骤 3.对射式红外传感器计次 (1)接线图 (2)CountSensor.c (3)main.c 4.旋转编码器计次 (1)接线图(旋转编码器接在PB1.P ...
- 51单片机入门(江科大)之个人笔记
目录 P3.单片机及开发板介绍 P4.点亮一个小灯泡 P5.LED闪烁 P6.LED流水灯 P7.独立按键控制LED亮灭 P8.独立按键控制LED状态 P9.独立按键控制LED显示二进制 P10.独立 ...
- 14、江科大stm32视频学习笔记——AD单通道和AD多通道代码
目录 一.程序现象 1.AD单通道 2.AD多通道 二.原理图 三.AD单通道 1.AD.c(单次转换非扫描) 2.改为连续转换非扫描 3.main.c 四.AD双通道(单次转换非扫描) 1.思路 2 ...
最新文章
- 初学MyBatis-Plus
- 2位图灵奖得主、7位院士等一众AI大佬云集共议数字化转型 | CNCC 2021
- JSPatch defineProtocol 实现详解
- C++实现基数排序(附完整源码)
- 2.3微秒的特征点匹配
- NullInjectorError:No provider for MyNewService
- Linux 命令积累 fuser lsof mtr
- 2017双11交易系统TMF2.0技术揭秘,实现全链路管理
- 表单表格-为什么标签需要语义化
- java collection 常用类_分析Collection常用的实现类
- c++简单程序实现——小公主养成记
- 伍斯特理工学院计算机研究生,伍斯特理工学院计算机工程硕士排名第52(2020年TFE Times排名)...
- linux中查看ruby版本号,Ruby 版本常量
- 电脑休眠唤醒后无法显示WIFI列表
- C Runtime Library 与 STL
- 对中国四大名著--红楼梦 使用jieba进行分词处理 排除去停词 统计完整词频并按降序排列 前20词绘制词云图
- Android开发、adb、monkey测试
- multiple definition of `main'
- 通达OA 工作流电子签章 盖章Or手写
- Aras Innovator Method集成Visual Studio
热门文章
- [历年IT笔试题]2014京东校园招聘-软件开发笔试题
- mysql 5.7.17 zip_win10下mysql 5.7.17 zip压缩包版安装教程
- 使用ARCHPR明文攻击爆破压缩包
- [Python公开课]零基础玩转Python基础篇----第四节:Python的字符串
- TexturePacker图集拆分
- OSS: cURL error: Empty reply from server (52)
- ecg 幅度_ECG(心电图)
- 明明白白学通C语言 二维码版 pdf
- 【rk3399】AIO-3399J Linux_SDK Recovery按键无法进入Loader模式
- oracle trim函数用法详解