STM32f4学习初级篇笔记

GPIO

输入浮空 逻辑器件的输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰
输入上拉 将不确定信号通过电阻接到Vcc,电阻限流,强弱由阻值决定
输入下拉 接到GND
模拟输入 模拟输入是指传统方式的输入.数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。
开漏输出 输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).
推挽输出 可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定
推挽式复用功能 可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)
开漏式复用功能 可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)

实验

1.通用IO口输出
跑马灯

原理:采用推挽输出强高低电平控制led的on/off:默认上拉led灭

使能IO时钟 RCC_AHB1PeriphClockCmd()
初始化IO口 gpio_init(){GPIO_Pin,GPIO_Mode,GPIO_OType,GPIO_Speed,GPIO_PuPd}
操作IO口,输出高低电平 GPIO_SetBits() / GPIO_ResetBits()

蜂鸣器
原理:检测输入
ps:不能IO口直接驱动大功率器件,考虑io的驱动电流设计电路:三极管扩流,电阻防止小电流误发声。
2:通用IO口输入
按键

使能IO时钟 同out
初始化IO口 同out
获取输入状态 GPIO_ReadInputDataBit()
delay_ms(10); 延时一定时间防抖(按键稳定)

按键操作分为
1:支持连续按(eg:音量键)
2:不支持连续按(eg:电源键)

//mode 0:不支持连续按
//mode 1:支持连续按
U8 key_scan(u8 mode)
{
       Static u8 key_flag=1;
       if(mode)key_flag=1;//
       if(key_flag&&KEY按下){
	delay_ms(10);
 	key_flag=0;//标记按下
	if(KEY确实按下){
	return KEY_VALUE;}
	}
	else if(KEY没按) key_flag=1;
}

3:串口通信

1:并行通信:数据各个位同时传输(8位8个口):速度快,占用引脚多
2:串行通信:数据按位顺序:占用引脚烧,速度慢
》根据数据传输
单工
半双工
全双工
》根据时钟信号
·······同步:带时钟同步信号:SPI IIC
·······异步:UART:约定:baudrate,校验.

步骤
时钟 串口时钟使能,GPIO 时钟使能
设置引脚复用器映射 GPIO_PinAFConfig()
GPIO 初始化设置 设置mode为AF
串口参数初始化 USART_Init(){BaudRate,WordLength,StopBits,Parity,HardwareFlowControl,Mode(rx/tx)}
使能串口 USART_Cmd()
开启中断 {USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
初始化 NVIC USART1_IRQn}NVIC_Init()
编写中断处理函数 USART1_IRQHandler():可设计通信协议 eg:(数据以0x0d 0x0a结尾)

4:外部中断实验
每个 IO 都可以作为 :外部中断的中断输入口
GPIO 跟中断线的映射关系(中断线16个:对应与GPIOx.0–GPIOx.15)

步骤
使能 IO 口时钟/初始化 IO 口为输入 gpio_init()/AHBclkcmd()
使能 SYSCFG 时钟/设置 IO 口与中断线的映射关系 RCC_APB2PeriphClockCmd()/SYSCFG_EXTILineConfig();
初始化线上中断,设置触发条件 EXTI_Init(){line,mode,trigger,linecmd}
配置中断分组(NVIC),并使能中断 NVIC_init()
中断服务函数 EXTIx_IRQHandler

5:看门狗实验

独立看门狗:程序跑飞复位
内部低速(LSI) 从KR写入0xcccc开始启动,0xfff计数递减到0x000时复位:在中间写入0xaaaa时重载计数(喂狗)写0x5555取消(pre rlr)写保护

(IWDG)

步骤
取消寄存器写保护(向 IWDG_KR 写入 0X5555 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
设置独立看门狗的预分频系数和重装载值 IWDG_SetPrescaler()/void IWDG_SetReload(){Tout=((4×2^prer) ×rlr) /40 }
重载计数值喂狗(向 IWDG_KR 写入 0XAAAA IWDG_ReloadCounter();
启动看门狗 IWDG_Enable();

窗口看门狗:通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序 背离正常的运行序列而产生的软件故障
(设置)上窗口-----------》下窗口(0x3f):之间喂狗
两边复位 0x40有中断也复位(EWI:早期唤醒中断)

(WWDG)

步骤
使能 WWDG 时钟 RCC_APB1PeriphClockCmd()
设置窗口值和分频数 WWDG_SetWindowValue()/ WWDG_SetPrescaler()
开启 WWDG 中断并分组 WWDG_EnableIT();
设置计数器初始值并使能看门狗 WWDG_Enable()/ WWDG_SetCounter()
编写中断服务函数 wwdg_IRQHandler()

6:定时器中断实验

你可能感兴趣的:(stm32学习与应用)