1.上拉输入:上拉就是拉高电位,比如拉Vcc。上拉就是将IO口腔上不确定的信号通过上拉电阻使用IO上拉为高电平!电阻同时起限流!弱强度只是上拉电阻的电阻值不同,没有严格区分。 带上拉输入_IPU——IO内部上拉电阻输入
2.下拉输入:将电压降低到GND。类似于上拉原理。 带下拉输入_IPD—— IO输入内部下拉电阻
浮空输入:浮空输入(floating)也就是说,逻辑器件的输入引脚不连接高电平或低电平。由于逻辑器件的内部结构,当输入引脚悬挂时,相当于引脚连接高电平。一般实际使用时,不建议引脚悬挂,容易干扰。 一般来说,管脚什么都不接,浮空。 浮空输入_IN_FLOATING ——可以做浮空输入KEY识别,RX1
4.模拟输入:模拟输入是指传统的输入方式.数字输入是输入PCM数字信号,即0、1的二进制数字信号,通过数模转换转换为模拟信号,通过前级放大进入功率放大器,或模拟功率放大器。 模拟输入_AIN ——应用ADC模拟输入或低功耗省电
5.推拉输出:可输出高、低电平、连接数字设备; 推拉结构一般是指两个三极管分别由两个互补信号控制,总是在一个三极管导通时另一个截止日期。高低电平由IC低电源。 推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值未知
6、开漏输出:输出端相当于三极管的集电极. 需要上拉电阻才能获得高电平状态. 适用于电流驱动,其吸收电流的能力相对较强(一般20ma以内)。 开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬挂,需要外部上拉电阻才能实现高输出电平。当输出为1时,IO口的状态由上拉电阻拉高,但由于是泄漏输出模式,因此IO口可由外部电路改为低电平或不变。IO实现输入电平的变化C51的IO双向功能
7.复用开漏输出和复用推挽输出可理解为:GPIO当口被用作第二个功能时(即不是通用)的配置IO口使用)。 复用功能泄漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS) 复用功能推拉输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
虽然我记得这么多,但我仍然没有深刻的理解。我觉得输出的手段几乎是一样的。 嗯,我问了学长关于输入模式的内容,了解到输出和例子程序差不多,基本通用的。
那不是很简单(懒癌晚期福音)。
嗯,算个笔记,把设置端口的实例程序写在这里。
#include "led.h" #include "stm32f10x.h" void LED_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOE,&GPIO_InitStructure); GPIO_SetBits(GPIOE,GPIO_Pin_5); }
当然啦,该声明的头文件还是要打上去,不然人家STM我不知道你在做什么。…(笑)。
哦,顺便说一句,这里还记得拉高电平和拉低电平的函数。毕竟新手往往不记得了。 (怕看的时候看不懂一小块程序,就放了整块。
#include "stm32f10x.h" #include "led.h" #include "delay.h" int main(void) {
delay_init(); LED_Init(); while(1){
GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_SetBits(GPIOE,GPIO_Pin_5); delay_ms(500); GPIO_ResetBits(GPIOB,GPIO_Pin_5); GPIO_ResetBits(GPIOE,GPIO_Pin_5); delay_ms(500); } }
嗯,最后应该是对这个编程方法的总结。就我自己而言嘛,我觉的一个工程应该包括
学了这几个方面的内容。不知道为啥突然就怀念起了学arduino的快乐。 arduino真的好用,不同意反驳。
嗯,然后就记一下有关设置中的I/O速度的设置。
——其实就是带宽。 低的速度有利于省电和降低功耗,高的速度有利于信号的保真。
高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。 (感觉这个讲的挺细致的,虽然我看不懂,但为了我以后方便查阅还是把网站放在这) https://zhidao.baidu.com/question/337811236.html
嗯,至于我现在学的还是挺简单的东西,所以速度这东西,无脑拉高就行。
使能时钟这给事情实在是第一次接触到。嗯,说的这么专业其实也就是那么一回事。 考虑到功耗,不可能让所有的串口都在工作,所以不用就关闭,要用时再打开而且默认是关闭的。 所以就需要在写程序的时候打开那玩意。 ——这个过程就是使能时钟。 那怎么使能时钟就靠这一条代码。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
把GPIO后面的字母改成要用的端口就行了。
https://blog.csdn.net/weixin_43217963/article/details/97792677
这个地方对于时钟使能的介绍比较详细挂在这里方便后续查看。 那么 今天的STM32就学到这里,王者荣耀启动。 如果有啥理解的不对的地方,还请在评论区指正(* — *)