首页 > 其他分享 >STM32深入学习3:GPIO模块控制LED(寄存器版)

STM32深入学习3:GPIO模块控制LED(寄存器版)

时间:2023-09-03 19:55:34浏览次数:52  
标签:输出 LED GPIOx STM32 GPIOC 寄存器 GPIO RCC

GPIO模块数据手册详解:

GPIO:通用输入/输出

AFIO:备用输入/输出

GPIOx_CRL和GPIOx_CRH:配置寄存器

GPIOx_IDR和GPIOx_ODR:数据寄存器

GPIOx_BSRR:置位/复位寄存器

GPIOx_BRR:复位寄存器

GPIOx_LCKR:锁定寄存器,锁定GPIO的数值

GPIO模式:

1.输入浮动:完全由外部决定

2.输入上拉和输入下拉:存在上拉和下拉电阻

3.模拟输入:不经过任何电路,直接到AD输入

4.输出开漏:开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。

5.输出推挽模式:想输出高电平,就输出高电平,想输出低电平就输出低电平。有较强的驱动力,但是如果两个输出接在一起会引起短路。

6.备用功能推挽

7.备用功能开漏

为了使用外部中断,需要将端口配置为输入模式,进行映射。

PZ-6806L原理图上,LED接到了PC0-PC7上,同时LED的另一边接的是3.3V,因此,管脚置0为亮,置1为灭。

mian函数之前,还有起始代码:从复位开始执行第一条指令,到main函数之前所做的事情就是起始代码。构建运行环境。

起始代码:不同的CPU起始代码一般不同。startup file for device,根据cpu的汇编环境编写。

寄存器信息:

STM32f103zet6 的portB的起始地址

GPIOC_CRL和GPIOC_CRH

偏移量 GPIOC_CRL 0x00, 寄存器地址为0x4001 1000

    GPIOC_ODR 0X0C  寄存器地址为0x4001 100C

ARM是内存与IO统一编址的,所以ARM中的所有外设都是通过寄存器来操作的

每个寄存器都有地址,C语言通过位操作和指针来进行操作。

常见面试题:用c语言向内存地址0xXXXXX写入16

*(unsigned int*) 0xXXXXX = 16;

或者unsigned int *p = (unsigned int *) 地址, *p = 16;

 

除了GPIOC_CRL和GPIOC_ODR需要设定外,RCC_APB2_ENR也需要进行设定。

RCC_APB2_ENR 寄存器地址为:0x40021000,偏移量为0x18

优先选择bsrr,因为bsrr是原子操作,不会被中断操作打断。

#define RCC_APB2_ENR 0x40021018
#define GPIOC_CRL 0x40011000
#define GPIOC_ODR 0x4001100C
    *((unsigned int *)RCC_APB2_ENR) = 0x00000010;
    //推挽输出模式,速率为50MHZ
    (*((unsigned int *)GPIOC_CRL)) = 0x33333333;
    //输出0点亮LED
    (*((unsigned int *)GPIOC_ODR)) = 0X00000000;

 

 

STM32时钟设置函数移植与讲解

上电之后系统自动会设置一个时钟,默认使用8M。如果需要72M,那么需要人为的切换时钟源

HSE的设定,PLL的设定,SYSCLK的设定

SysClock_Init()函数进行时钟初始化。

RCC_CR寄存器:偏移量为0x00

RCC基地址:0X40021000

do while()循环,判断外部时钟开启是否成功

RCC_CFGR配置系统时钟源

打开PLL使能,设定PLL的频率

设置 FLASH 时延 保证能正确读取内存中的内容

 

 

 

  TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back     此页面的语言为中文(简体)   翻译为        
  • 中文(简体)
  • 中文(繁体)
  • 丹麦语
  • 乌克兰语
  • 乌尔都语
  • 亚美尼亚语
  • 俄语
  • 保加利亚语
  • 克罗地亚语
  • 冰岛语
  • 加泰罗尼亚语
  • 匈牙利语
  • 卡纳达语
  • 印地语
  • 印尼语
  • 古吉拉特语
  • 哈萨克语
  • 土耳其语
  • 威尔士语
  • 孟加拉语
  • 尼泊尔语
  • 布尔语(南非荷兰语)
  • 希伯来语
  • 希腊语
  • 库尔德语
  • 德语
  • 意大利语
  • 拉脱维亚语
  • 挪威语
  • 捷克语
  • 斯洛伐克语
  • 斯洛文尼亚语
  • 旁遮普语
  • 日语
  • 普什图语
  • 毛利语
  • 法语
  • 波兰语
  • 波斯语
  • 泰卢固语
  • 泰米尔语
  • 泰语
  • 海地克里奥尔语
  • 爱沙尼亚语
  • 瑞典语
  • 立陶宛语
  • 缅甸语
  • 罗马尼亚语
  • 老挝语
  • 芬兰语
  • 英语
  • 荷兰语
  • 萨摩亚语
  • 葡萄牙语
  • 西班牙语
  • 越南语
  • 阿塞拜疆语
  • 阿姆哈拉语
  • 阿尔巴尼亚语
  • 阿拉伯语
  • 韩语
  • 马尔加什语
  • 马拉地语
  • 马拉雅拉姆语
  • 马来语
  • 马耳他语
  • 高棉语
 

标签:输出,LED,GPIOx,STM32,GPIOC,寄存器,GPIO,RCC
From: https://www.cnblogs.com/ustc2122zy/p/17672991.html

相关文章

  • STM32基础(一)
    1.Keil5MDK下载。  2.自己画板子,需了解封装。51单片机是5V供电,USB输出电压也是5V。STM32单片机不能5V直接供电,需要加稳压芯片,把电压降到3.3V。USB输出电压也是5V。 3.片上资源(外设) ......
  • Java:SpringBoot实现定时任务Scheduled
    代码示例packagecom.example.demo.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.annotation.EnableScheduling;importorg.springframework.scheduling.annotation.Scheduled;importjava.text.SimpleDat......
  • AI绘画:StableDiffusion实操教程-斗罗大陆2-江楠楠-常服(附高清图下载)
    前段时间我分享了StableDiffusion的非常完整的教程:“AI绘画:StableDiffusion终极宝典:从入门到精通”尽管如此,还有读者反馈说,尽管已经成功安装,但生成的图片与我展示的结果相去甚远。真实感和质感之间的差距到底在哪里?关键之处在于使用正确的大模型model和专用的lora包。今天,我......
  • SPI接OLED
    7脚OLED显示屏接线GND电源地 VCC电源正 D0SPISCKPB10D1SPIMOSIPC3RESGPIOPA6DCGPIOPA7CSGPIOPC4RESDCCS的GPIO初始化查看代码#defineOLED_RST_PinGPIO_PIN_6#defineOLED_RST_GPIO_PortGPIOA#defineOLED_DC_PinGPIO_......
  • Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: The
    这个错误表明在尝试获取JDBC连接时发生了SQLException,并且该异常表示服务器不识别或不包含一个以上的时区。以下是一些可能的解决方法:确认服务器时区设置:确保你的服务器时区设置正确。你可以在数据库中运行以下查询来检查当前时区设置:sqlSELECT@@全球化设置(‘TzSystem’);如......
  • Java:SpringBoot实现定时任务Scheduled
    代码示例packagecom.example.demo.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.annotation.EnableScheduling;importorg.springframework.scheduling.annotation.Scheduled;importjava.text.SimpleDate......
  • 代码扫描提示:java: Compilation failed: internal java compiler error
    检查Idea中编译的版本和项目的是否一致 ......
  • AI绘画美女:StableDiffusion实操教程-完美世界-国漫女神云曦(附高清图下载)
    前段时间分享过StableDiffusion的入门到精通教程:AI绘画:StableDiffusion终极宝典:从入门到精通但是还有人就问:安装是安装好了,可是为什么生成的图片和你生成的图片差距那么远呢?怎么真实感和质感一个天一个地呢?其实很关键的因素,就是别人用了对的对应大模型model和专门的lora包。......
  • LED车灯IC降压恒流驱动AP5103大功率95%高效率深度调光摩托车灯芯片
    产品描述AP5103是一款效率高,稳定可靠的LED灯恒流驱动控制芯片,内置高精度比较器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率LED恒流驱动。AP5103采用ESOP8封装,散热片内置接SW脚,通过调节外置电流检测的电阻值来设置流过LED灯的电流,支持外加电压线性调光,最大电流......
  • LED摩托车灯驱动ICAP5160降压恒流芯片输出8A大电流
    产品描述AP5160是一款效率高,稳定可靠的LED灯恒流驱动控制芯片,内置高精度比较器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率LED恒流驱动。AP5160采用SOT23-6封装,通过调节外置电流检测的电阻值来设置流过LED灯的电流,从而设置LED灯的亮度,外驱MOS管最大输出电流......