〇、ARM体系结构与STM32
一、GPIO原理:
参考:
STM32的GPIO有几种输入模式及其说明
https://jingyan.baidu.com/article/3065b3b698a6aabecff8a4cd.html
STM32的GPIO有几种输出模式及其说明
https://jingyan.baidu.com/article/5d6edee2f873f899eadeecff.html
在STM32中选用IO模式
(1)浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
(2)带上拉输入_IPU——IO内部上拉电阻输入
(3)带下拉输入_IPD—— IO内部下拉电阻输入
(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由外接上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
二、STM32时钟树
三、STM32中断系统
stm32f103学习笔记——NVIC初始化
原文:https://blog.csdn.net/Lang_Billow/article/details/45133465
void Nvic_Init(void)//中断优先级初始化
{
NVIC_InitTypeDef NVIC_InitStructure;
/* NVIC_PriorityGroup */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//指定抢占优先级为两位,响应优先级为2位,(抢占优先级->响应优先级->中断向量表顺序)
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//指定TIMER3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//指定抢占优先级为2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//指定响应优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断请求
NVIC_Init(&NVIC_InitStructure);//根据赋的结构体对NVIC初始化
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //指定TIMER4中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //指定抢占优先级为0,0为最高优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //指定响应优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断请求
NVIC_Init(&NVIC_InitStructure); //根据赋的结构体对NVIC初始化
/* Enable the USARTy Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//指定串口3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//指定抢占优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//指定响应优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断请求
NVIC_Init(&NVIC_InitStructure);//根据赋的结构体对NVIC初始化
}
外部中断EXTI
https://blog.csdn.net/ABAP_Brave/article/details/52514867
单片机中USART的那些事儿
https://blog.csdn.net/qq_21990661/article/details/79803211
STM32F103C8T6之通用异步收发器(发送接收中断)
https://blog.csdn.net/lzp15274578636/article/details/76165474
附录:
1.4x4 矩阵键盘扫描原理:
首先,给P1赋值0xf0,这时P1^4,P1^5,P1^6,P1^7为高电平,P1^0,P1^1,P1^2,P1^3为低电平。如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。因此P1的值就不等于0xf0,这是就可以判断有按键按下。
然后延时一段时间去抖动,然后给P1赋值0xfe,也就是P1^0为低电平,其他为高电平,这时如果有在P1^0线上的P1^4,P1^5,P1^6,P1^7有按键按下,那么就会出现低电平,从而判断哪个按键按下;如果没有那么就给P1赋值0xfd,也就是P1^1为低电平,其他为高电平.,相同方法判断是否有按键按下;如果没有那么就给P1赋值0xfb·····如此类推,一共四次检测。