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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【STM32-野火】(三)使用寄存器点亮LED -> 正文阅读

[嵌入式]【STM32-野火】(三)使用寄存器点亮LED

【STM32-野火】(三)使用寄存器点亮LED

(一).由于stm32比51要更加高级,所以配置时不仅有输入还有输出,此时由配置高低寄存器决定端口,要配合材料看。
在这里插入图片描述
对应上图写配置GPIO为输出的代码 (操作寄存器内存点亮LED)。
代码如下,操作流程:
1.首先打开相应GPIO口的复位时钟,只有在时钟工作的时候,配置的相应GPIO才会工作

2.其次配置GPIO,在手册中找到对应的真实地址,将其配置为1(意思是配置IO口为输出,由于既有输入也有输出,所以在用时一定要配置)

3.最后再将LED所在ODR配置为0,使其点亮
所以即使没有第三步也可点亮灯,因为复位时自动清零,也就是相当于置0了

在这里插入图片描述
(二)拓展:
置位(符号):|=
清除(符号):&=
(三)GPIO功能框图讲解,IO口与芯片内部工作原理
在这里插入图片描述

  1. 推挽输出(P-Mos管负责)
    在这里插入图片描述
    由上图可知:如果ODR输入为0,反向为1,上面截止,下面会导通,输出为0V。(上通为推(灌电流),下通为挽(拉电流))
    在这里插入图片描述

2.开漏输出**(不接上拉电阻时,只能输出低电平,N-MOS负责)**
在这里插入图片描述
在这里插入图片描述

  1. 输入 在这里插入图片描述
    在这里插入图片描述

综上:
在这里插入图片描述
代码(寄存器控制):
.h文件应为:(从大地址推小地址,一步步找到要控制的寄存器和GPIO外设)
在这里插入图片描述

main函数里应为:
在这里插入图片描述
把清零操作注释掉,灯亮。
在这里插入图片描述
补充:还可以使用BSRR寄存器控制LED灯
.c文件

#include "stm32f10x.h"
typedef unsigned int u16;

void delay(u16 i)
{
	while(i--);
}

int main(void)
{
	while(1)
	{
		/*使用地址直接控制电路*/
//		//打开GPIO对应时钟
//		*(unsigned int*)0X40021018 |=((1)<<3);
//		//配置IO为输出
//		*(unsigned int*)0X40010C00 |=((1)<<(4*1));
//		//控制ODR寄存器,使LED亮起
//		*(unsigned int*)0X40010C0C &=~(1<<1);
//		delay(100);
//		*(unsigned int*)0X40010C0C |=(1<<1); //关掉LED
		
	/*使用CRL寄存器直接控制电路*/	
//		//打开GPIO对应时钟
//			RCC_APB2ENR |=((1)<<3);
//		//配置IO为输出
//	   	GPIO_B_CRL  |=((1)<<(4*5));
//		//清零操作(寄存器清空)
//			GPIO_B_CRL  &=~((0X0F)<<(4*5));
//		//控制ODR寄存器,使LED亮起
//		  GPIO_B_ODR  &=~(1<<5); 
//		//清零操作(开关掉LED)
//			//  GPIO_B_ODR  |=(1<<5);
	
	/*使用BSRR寄存器控制CRL然后控制电路*/	
				//打开GPIO对应时钟               
				  RCC_APB2ENR |=((1)<<3);
				//配置IO为输出
				  GPIO_B_CRL  |=((1)<<(4*1));
				//清零操作(寄存器清空)
				//GPIO_B_CRL  &=~((0X0F)<<(4*5));
				//控制ODR寄存器,使LED亮起
				  GPIO_B_BSRR  &=~(1<<1); 
				//清零操作(开关掉LED)
				  GPIO_B_BSRR  |=(1<<1);
			
			
//		//打开GPIO对应时钟
//			RCC_APB2ENR |=((1)<<3);
//		//配置IO为输出
//	   	GPIO_B_CRL  |=((1)<<(4*0));
//		//控制ODR寄存器,使LED亮起
//		  GPIO_B_ODR  &=~(1<<0); 
//		//关掉LED
//		//  GPIO_B_ODR  |=(1<<0);
			
			
	}
}

.h文件

//存放STM32寄存器映射代码

//外设  perirhral

#define  PERIPH_BASE         ((unsigned int)0X40000000)
#define  ABP1_BASE            PERIPH_BASE
#define  ABP2_BASE           (PERIPH_BASE+0X10000)
#define  AHB_BASE            (PERIPH_BASE+0X20000)

#define  RCC_BASE            (AHB_BASE+0X1000)
#define  GPIO_B_BASE         (ABP2_BASE+0X0C00)

#define  RCC_APB2ENR          *(unsigned int*)(RCC_BASE+0X18)

#define  GPIO_B_CRL           *(unsigned int*)(GPIO_B_BASE+0X00)
#define  GPIO_B_CRH          	*(unsigned int*)(GPIO_B_BASE+0X04)
#define  GPIO_B_ODR          	*(unsigned int*)(GPIO_B_BASE+0X0C)
#define  GPIO_B_BSRR          *(unsigned int*)(GPIO_B_BASE+0X10)
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:19:13  更:2021-09-12 13:19:53 
 
开发: 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/17 20:49:15-

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