STM32用寄存器点亮LED灯

发布者:温柔心情最新更新时间:2019-09-10 来源: eefocus关键字:STM32  寄存器  点亮LED灯 手机看文章 扫描二维码
随时随地手机看文章

寄存器:实际上就是cpu里面的东西 每个单元都有不一样的功能,根据功能给这些存储单位取别名,这个别名就是我们所说的寄存器。

寄存器的映射:给寄存器分配地址的过程就叫作寄存器的映射。


新建工程:

新建工程需要手动创建main.c

.h(头文件)头文件:寄存器的映射

如何写寄存器的映射:

首先找到需要控制外设的IO口,根据这个IO口去寄存器组织架构寻找需要控制外设的IO口在哪里基地址是什么,然后再看需要控制外设的IO口的偏移地址。该IO口的地址就是基地址+偏移地址

**端口的地址在编译器看来只是个地址所以必须强制转换成指针(*unsigned int)+地址

通过控制io口的高低电平去实现我们想要的功能(通用io口(GPIO))


修改寄存器位的操作方法:

//直接操作会把寄存器的32位都操作了,用下面的方法就可以操作你想操作的位

对某位清零,对某几位清零[a &=~(1<<3)]/[a &=~(3<<2*2)]

对某位进行赋值[a |=(1<<3)]

对某位进行取反[a ^=(1<<3)]


GPIO的输出初始化顺序


GPIO是输入、通用输出、复用功能还是模拟输入(模式寄存器 MODER)

如果是输出还要确定是推挽输出还是漏极输出(输出类型寄存器 OTYPER)

配置输出的速度(输出速度寄存器 OSPEEDR)

输出时要不要开启上下拉电阻(上拉/下拉寄存器 PUPDR)

具体输出内容(置位复位寄存器BSRR和数据输出寄存器ODR)

//复位就是清零,置位就是置1

用寄存器点亮LED灯:

(查手册,看地址:

GPIOH 基地址为0x4002 1C00

GPIOH的外设时钟RCC基地址为0x40023800)

1.查看原理图在这里插入图片描述

2.STM32中的每个外设时钟都是关闭的,由RCC统一控制

RCC_AHB1ENR地址为(0x40023800 +0X30)

控制GPIOH的外设时钟在第七位

为1时使能在这里插入图片描述在这里插入图片描述在这里插入图片描述

3. STM32和STC89C51单片机不一样。STM32还需控制IO口,定义XX为输出端口

有一个MODER寄存器(模式寄存器)控制io的输入或者是输出

GPIOH_MODER地址(0x40021C00+0x00)

选择00通用输出模式在这里插入图片描述在这里插入图片描述在这里插入图片描述

4. 确定输出类型(OTYPER)

//推挽输出

输出1

GPIOH_OTYPER 地址(0x4002 1C00+0x4)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.配置输出速度(OSPEEDR)

//配置输出速度为2M

输出00

GPIOH_OSPEEDR地址(0x4002 1C00+0x08)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.输出要不要上拉电阻

//不要上拉电阻

输出00

地址(0x4002 1C00+0x0C)在这里插入图片描述在这里插入图片描述在这里插入图片描述

7. 让PH10输出低电平,点亮led灯(也可以通过控制GPIO端口置位/复位寄存器下次再写)

地址(0x4002 1C00+0x14)在这里插入图片描述在这里插入图片描述

————————————————————————————————————————————————————————————————————

点亮其他灯和点亮红灯的方法一样的

点亮一绿灯的代码如下:

在这里插入图片描述

流水灯

在这里插入图片描述


关键字:STM32  寄存器  点亮LED灯 引用地址:STM32用寄存器点亮LED灯

上一篇:关于STM32F107VCT6串口DMA接收数字控制LED亮灭的功能实现
下一篇:基于STM32从零写操作系统系列---点亮LED灯

推荐阅读最新更新时间:2024-11-11 10:24

必须知道的stm32内部flash操作细节
1.stm32内部flash写操作只能是两个byte写入,不能一个byte一个byte的写 2.写之前需要擦除,擦除后数据均为FF 3.内部flash为512kb为大容量,小于512为小容量。在stm32的stm32f10x_flash.c里面FLASH_Status FLASH_ErasePage擦除页函数有区别擦2k还是擦1k,大容量擦2k,小容量擦1k 4.读可以只读一个字节,例如:*(uint8_t*)(Address) 5.我的代码中,擦除和写过程没有加延时函数,因为库函数里面已经有一个确保操作完成的函数。 6.擦写前先调用解锁函数。
[单片机]
STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关系
NVIC是Cortex-M3核心的一部分,关于它的资料不在《STM32的技术参考手册》中,应查阅ARM公司的《Cortex-M3技术参考手册》 Cortex-M3的向量中断统一由NVIC管理 EXTI是ST公司在其STM32产品上扩展的外中断控制。它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断(PVD,RTC alarm,USB wakeup,ethernet wakeup),以及软件中断。其输出最终被映射到NVIC的相应通道。因此,配置EXTI中断的过程必然包含对NVIC的配置,例如下面配置EXTI0的过程,就要首先配置EXTI控制器(使能相应的中断线,选择中断/事件模式,触发边沿极性),然后再配置NVIC控制器(
[单片机]
stm32 ADC知识总结(二)
关于STM32的ADC的一些重要特点需要记住: 1)STM32F103系列至少有2个ADC,这些ADC可以独立使用,也可以使用双重模式(提高采样率); 2)STM32的ADC是12位逐次逼近型的模数转换器,一共有18个通道,可以测量16个外部信号和2个内部信号源; 3)每个通道的ADC可以在单次、连续、扫描或者间断模式下进行; 4)前面讲过STM32的ADC是12位的,结果存储在16位的数据寄存器中,有4位用不到,所以ADC存在左对齐或右对齐的方式; 5)模拟看门狗允许应用程序检测输入电压是否超出用户定义的高低阈值; 6)STM32的ADC最大的转换速率为1MHz,也就是说最快转换时间为1us,为了保证ADC转换结果的
[单片机]
<font color='red'>stm32</font> ADC知识总结(二)
Jlink的三线制SWD方式连接STM32芯片无法识别的解决方案
网上找到此文章解决了j-flash只能连接后不能烧录的问题,希望遇到相同问题的小伙伴,可以用同样的办法解决: 前段时间,做了一块板子,调试接口只留了三个口SWD、SWCLK、GND,在使用Jlink的SWD方式调试的时候发现无法连接。使用ST-link的时候可以连接,无奈楼主的ST-link的链接方式相当的不可靠,时而能识别时而不能识别:当然我的ST-link是山寨版的。 那么问题来了:为什么通过20针全部连接的方式可以调试,而三针的方式就不行了呢? 古人云知之为知之,不知Google之,Google不让用,那就问度娘好了。 通过查阅网上资料发现,jlink的20针,不光有调试的功能还有供电和检测电压的功能。 下面是jl
[单片机]
STM32的GPIO口使用
STM32的GPIO类似于51单片机的IO口。只不过STM32的IO口使用时要配置输入/输出模式、速度、而且时钟使能后才能使用。 配置相关代码: GPIO_InitTypeDef GPIO_InitStructure;//定义初始化类型结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开GPIOA时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//引脚 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度 GPIO_InitStructure.GPIO_M
[单片机]
<font color='red'>STM32</font>的GPIO口使用
FPGA配置芯片EPCS读写操作--STM32读写
注意事项: (1)首先STM32需要设置nCE和nConfig信号,即nCE置高,nConfig拉低,获得EPCS的控制权,而后对EPCS操作,操作完成后需要释放这两个管脚,即nCE拉低,nConfig置高。 (2)EPCS的极性为:sck为空闲状态为高电平,采样边沿为SCK的第二个跳变沿,(即上升沿,注意前提是SCK空闲为高) SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_Mode = SPI_Mode_M
[单片机]
STM32】STM32F407 + DHT11
一、DHT11简介 DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度5~95%RH, 温度-20~+60℃。 ——来自百度百科 测量范围:湿度 5~95%RH, 温度 -20~+60℃ 测量精度:湿度 ±5%RH, 温度 ±2℃ 供电电压:3.3~5.5V DC 输 出:单总线数字信号 分辨率:湿度1%RH, 温度0.1℃ 关于单总线协议可以查看这篇文章:【STM32】stm32f407 + DS18B20 碰出不一样的火花 二、编程思路 温湿度传感器 DHT11 和 温度传感器 DS18B20 均采用 单总线协议,因此两者的编程思路很相似,不过 DHT11 增加了湿度
[单片机]
stm32若干技巧
技巧1:关于串口接收 对于串口数据帧到检测,对于串口接收有判定帧头、尾 FIFO缓存等方式,推荐采用超时判断来确定一帧数据接收完成,尤其对于处理GPS,3G模块数据效,比判断帧头、尾效果好的多。参考网友模式 //检测超时函数 供定时器中断调用-1ms一次 // t为超时时间 __inline void Chk_TimeOut(u8 t) { if(!uartRMsg.rcOK && (uartRMsg.rcIndex =8) && (++uartRMsg.rcS =t) ) //超时之后,开始重新解码 uartRMsg.rcOK = true; } //接收函数, 供USART中断调用 __inline void Recie
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved