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);
初始化 NVICUSART1_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 写入 0X5555IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
设置独立看门狗的预分频系数和重装载值IWDG_SetPrescaler()/void IWDG_SetReload(){Tout=((4×2^prer) ×rlr) /40 }
重载计数值喂狗(向 IWDG_KR 写入 0XAAAAIWDG_ReloadCounter();
启动看门狗IWDG_Enable();

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

(WWDG)

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

6:定时器中断实验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值