STM32入门笔记(3)——GPIO
来源:互联网 发布:7日年化收益率简单算法 编辑:程序博客网 时间:2024/06/11 19:54
STM32的每个I/O口都由7个寄存器控制:2个32位端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位复位寄存器BSRR;1个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;最常用的有4个:CRL/CRH/IDR/ODR;因此通常情况下只需要配置好以上四个寄存器就可以了。而CRH和CRL作用是完全一样的,只不过CRH控制的是高8位的IO而CRL控制的是低8位的,因此IO的控制就显的比较简单了。
(1)使能IO时钟
老规矩,用到哪个IO使能哪组IO时钟。例:RCC->APB2ENR|=1<<2; // 使能PORTA时钟
(2)配置IO输入/输出模式
STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出)。例:设置PORTC的11位为上拉输入,12位为推挽输出
GPIOC->CRH&=0XFFF00FFF; // 清除这2位原来设置
GPIOC->CRH|=0X00038000; // PC11输入,PC12输出
GPIOC->ODR|=1<<11; // PC11上拉
(3)IO作为输入时判断IO高低电平
例:判断PORTC的11位是否为低
if((GPIOC->IDR&1<<11)==0)
{
//用户代码;
}
小结:
上电后IO默认为浮空输入状态;当输出速率为50M时,八种I/O模式CRH/CRL配置为:通用推挽输出:0x3;通用开漏输出:0x7;复用推挽输出:0xb;复用开漏输出:0xf;模拟输入:0x0;浮空输入:0x4(上电默认);下/上拉输入:0x8;
I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。
比如:
对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。
对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。
点亮LED例程:(正点原子开发板)
//点亮第一个LED灯,不用位映射#include"sys.h"#include "delay.h"int main(void){Stm32_Clock_Init(9);//初始化系统时钟delay_init(72);//延时初使化RCC->APB2ENR|=1<<2;//使能PORTA时钟GPIOA->CRH&=0XFFFFFFF0;//清PA8GPIOA->CRH|=0X03;//设置PA8为推挽输出GPIOA->ODR&=0<<8;//初始化PA8输出0while(1){GPIOA->ODR|=1<<8;//设置PA8输出1,led灭delay_ms(1000);//延时1sGPIOA->ODR&=0<<8;//设置PA8输出0,led亮delay_ms(1000);//延时1s}}// 位映射法点亮LED,不过于纠结位映射的具体实现#include"sys.h"#include "delay.h"int main(void){Stm32_Clock_Init(9);//初始化系统时钟delay_init(72);//延时初使化RCC->APB2ENR|=1<<2;//使能PORTA时钟GPIOA->CRH&=0XFFFFFFF0;//清PA8GPIOA->CRH|=0X03;//设置PA8为推挽输出PAout(8)=1;while(1){PAout(8)=0;delay_ms(1000);//延时1sPAout(8)=1;//设置PA8输出0,led亮delay_ms(1000);//延时1s}
- STM32入门笔记(3)——GPIO
- stm32学习笔记——GPIO
- stm32学习笔记——GPIO
- STM32-GPIO—JTAG
- STM32入门——第一天学习GPIO
- STM32——GPIO(1)
- STM32——GPIO(2)
- stm32—GPIO操作(库函数)
- STM32 GPIO入门学习
- STM32 入门之 GPIO
- STM32 入门之 GPIO
- STM32 GPIO 入门知识
- STM32学习笔记2——GPIO点灯
- STM32学习笔记2——再探GPIO
- STM32 学习笔记——GPIO口控制
- STM32学习笔记 — 之GPIO端口篇
- STM32学习笔记 — 之GPIO端口篇
- STM32学习笔记 — 之GPIO端口篇
- 计数排序
- Request_irq和setup_irq的区别
- CC2430 串口通信UART
- linux 等待队列
- 6410平台LCD Panel会闪动
- STM32入门笔记(3)——GPIO
- Driver Attributes/Device Attributes 及作为linux的一种读写接口的用法(timed_output实例)
- 懂事的宝宝
- Linux和android下测试键盘和触摸屏
- poj 1739 Tony's Tour
- boj-1002-A-B Problem 大数加减法
- C++: wxWidgets (1) 介绍(摘)
- 闪屏问题2
- PROC文件系统介绍 &&以PROC在线调试LCM && EXPORT_SYMBOL的用法