IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> GPIO寄存器 -> 正文阅读

[嵌入式]GPIO寄存器

配置引脚口,基本没有坑,无非只有CRL,CRH,IDR,ODR,BSRR,BRR,LOCK七个寄存器可以控制,看一下STM32中文参考手册基本可以直接上手。

下面来讲一下参考手册上需要注意的一些地方:

1.在配置GPIO时,会发现要是想配置为上下拉,只用相应位写入0x02。可是如何选择上拉还是下拉呢?需要我们配置ODR寄存器,相应位置1则上拉,置0就下拉。

2.个人感觉BSRR和BSR的作用可以合并,或者说可以除去BRR寄存器。是否可行呢?本人现在的理解深度浅,尚不明确设置这两个寄存器的作用,等以后有感觉时再来补充。(拼命挖坑……)

3.开启引脚口对应的时钟,不然心脏都没了,自然工作不了。

直接献上写的一个很简陋的点灯代码(点灯老好玩了,直接点,按键点,中断点,串口点,IIC点……用刘火良老师的语气:“哼~点到你饱!!!”)

代码老基础了,没有必要看,别看了别看了………………

/引用stm32f10x.h文件,如果不引用,比我还狠,就直接翻看手册,慢慢加地址,最后强制指针转化,我在最开始就这样操作,但是方法掌握就没有必要了/
static uint8_t GPIO_RCC(GPIO_TypeDef * GPIOx)
{
if(GPIOxGPIOA)
{
RCC->APB2ENR |=((1)<<2);
}
else if(GPIOx
GPIOB)
{
RCC->APB2ENR |=((1)<<3);
}
else if(GPIOx==GPIOC)
{
RCC->APB2ENR |=((1)<<4);
}
else
{
return 1;
}
return 0;
}

//LED灯初始化
void LED_Init(GPIO_TypeDef * GPIOx,uint16_t PINx)
{
//开启GPIOx的时钟
while(GPIO_RCC(GPIOx));
if(PINx<=7)
{
GPIOx->CRL &=~(0x0f<<(4PINx));
GPIOx->CRL |=(1<<(4
PINx));
}
else if(PINx>=8&&PINx<=15)
{
//CRH寄存器端位清空
GPIOx->CRH &=~(0x0f<<(4*(PINx-8)));
//CRH寄存器至于0001
GPIOx->CRH |= (1<<(4*(PINx-8)));
}
//ODR寄存器置于0
GPIOx->ODR &=~(1<<PINx);
}

//关灯
void LED_ON(GPIO_TypeDef * GPIOx,uint16_t PINx)
{
//配置BRy和BSy位控制引脚口状态
GPIOx->BSRR &=~(0x1<<PINx);
GPIOx->BSRR |=(1<<(16+PINx));
}

//开灯
void LED_OFF(GPIO_TypeDef * GPIOx,uint16_t PINx)
{
GPIOx->BSRR |=(1<<PINx);
}

//开启GPIOx的时钟
static uint8_t GPIO_RCC(GPIO_TypeDef * GPIOx)
{
if(GPIOxGPIOA)
{
RCC->APB2ENR |=((1)<<2);
}
else if(GPIOx
GPIOB)
{
RCC->APB2ENR |=((1)<<3);
}
else if(GPIOx==GPIOC)
{
RCC->APB2ENR |=((1)<<4);
}
else
{
return 1;
}
return 0;
}

void KEY_Init(GPIO_TypeDef * GPIOx,uint16_t PINx)
{
//开启GPIOx的时钟
while(GPIO_RCC(GPIOx));
if(PINx<=7)
{
GPIOx->CRL &=~(0x0f<<(4PINx));
GPIOx->CRL |=(0x08<<(4
PINx));
}
else if(PINx>=8&&PINx<=15)
{
//CRH寄存器端位清空
GPIOx->CRH &=~(0x0f<<(4*(PINx-8)));
//CRH寄存器置于1000,配置为上拉输入
GPIOx->CRH |= (0x08<<(4*(PINx-8)));
}
GPIOx->ODR |=(0x1<<PINx);
}

//检测输入GPIO口状态
uint8_t KEY_State(GPIO_TypeDef * GPIOx,uint16_t PINx)
{
uint8_t state;
state = (GPIOx->IDR)&(0x01<<PINx);
if(state!=0) state=1;
return state;
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:56:38  更:2021-10-08 11:57:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:25:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码