让文化·去旅行

点击上方蓝字可以关注我们哦

点灯点灯点到流水灯

效果图:

1寄存器

寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。

在计算机领域中,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

举一个例子,在殿上,寄存器比如太监,CPU比如皇帝,内存比如大臣,传送文件,你细品,再细品....

STM32内部的所有寄存器都有唯一的地址

寄存器地址 = 寄存器基地址+偏移地址(偏移量)

比如说查找GPIO F端口模式寄存器的地址,首先通过《STM32F4xx中文参考手册》(可在本公众号后台点击->笔记->技术秘籍大全获取)找到GPIOF的边界地址:0x4002 1400,然后再查找GPIO端口模式寄存器 的偏移地址:0x00,最后就得到GPIO F端口模式寄存器的地址0x0x40021400+0x00,其他寄存器也是如此。

2时钟树分析

时钟源:晶振、RC振荡器

晶振:自身产生时钟信号,为各种微处理芯片作时钟参考,晶振相当于这些微处理芯片的心脏,没有晶振,这些微处理芯片将无法工作。

RC振荡器:适用于低频振荡,一般用于产生1Hz~1MHz的低频信号。因为对于RC振荡电路来说,增大电阻R即可降低振荡频率,而增大电阻是无需增加成本的

时钟源用于产生方波时钟脉冲信号

时钟频率是一秒产生方波的计量单位

时钟频率(主频):1GHZ=1000MHZ=1000 000KHZ=1000 000 000HZ

1HZ:1S产生一个方波,1MHZ:1S产生1000 000 方波

1、STM32时钟源

LSI RC 32KHZ            低速内部振荡时钟源

LSE OSC 32.768KHZ  低速外部晶振时钟源

16MHZ HSI RC          高速内部振荡时钟源

4-26MHZ HSE OSC   高速外部晶振时钟源(本次笔记使用的是晶振8HZ)

2、STM32F407主要的时钟总线频率

FCLK,HCLK,PCLK都称为系统时钟,但区别如下, 
FCLK,提供给CPU内核的时钟信号,CPU的主频就是指这个信号; 
HCLK,提供给高速总线AHB的时钟信号;

PCLK,提供给低速总线APB的时钟信号;

SYSCLK(cpu 主频)   168MHZ

HCLK                           168MHZ

AHB(AHB1 AHB2)        168MHZ

APB1                             42MHZ

APB2                             84MHZ

3GPIO输出开发

GPIO:(General-purpose input/output)通用型之输入输出的简称

STM32F407ZET6板子:

一共有7组IO(ABCDEF)每组IO口有16个引脚,外加2个PH0和PH1(这两个引脚用于连接晶振)一共有114个IO引脚

每组通用I/O端口包括10个寄存器:

4个32位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)。

2 个32位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)。

1 个32位置位/复位寄存器 (GPIOx_BSRR)、

1 个32位锁定寄存器(GPIOx_LCKR)

2 个32位复用功能选择寄存器(GPIOx_AFRH 和GPIOx_AFRL)。

GPIO工作方式:

4种输入模式

浮空输入(没有上下拉电阻)

上拉输入(有上拉电阻)

下拉输入(有下拉电阻)

模拟输入(模拟信号)

4种输出模式

开漏输出(带上拉或者下拉)

开漏复用功能(带上拉或者下拉)

推挽式输出(带上拉或者下拉)

推挽式复用功能(带上拉或者下拉)

4种最大输出速度

2MHZ

25MHZ

50MHZ

100MHZ

补充:

开漏只能输出0,输出要靠外部上拉电阻才输出1(如IIC)

推挽式可输出1及输出0

上拉电阻和下拉电阻有什么用?

提高驱动能力:

例如,用单片机输出高电平,但由于后续电路的影响,输出的高电平不高,就是达不到VCC,影响电路工作。所以要接上拉电阻。下拉电阻情况相反,让单片机引脚输出低电平,结果由于后续电路影响输出的低电平达不到GND,所以接个下拉电阻。

在单片机引脚电平不定的时候,让后面有一个稳定的电平:

例如上面接下拉电阻的情况下,在单片机刚上电的时候,电平是不定的,还有就是如果你连接的单片机在上电以后,单片机引脚是输入引脚而不是输出引脚,那这时候的单片机电平也是不定的,R18的作用就是如果前面的单片机引脚电平不定的话,强制让电平保持在低电平。

4LED灯寄存器

(1)理解LED灯原理图

LED0连接在PF9引脚

PF9输出VCC(1),灯灭

PF9输出GND(0),灯亮

引脚电平变化是通过芯片内部(代码来改变),作为输出

引脚电平变化是通过芯片外部(按键、传感器....),作为输入

(2)配置好各个寄存器的地址(上面有提到如何寻找地址)

#define   RCC_AHB1ENR *((volatile unsigned int *)(0x40023800+0x30)) //值强制转化为地址,通过*解引访问地址空间的值

#define   GPIOF_MODER *((volatile unsigned int *)(0x40021400+0x00)) //值强制转化为地址,通过*解引访问地址空间的值#define   GPIOF_OTYPER *((volatile unsigned int *)(0x40021400+0x04)) //值强制转化为地址,通过*解引访问地址空间的值#define   GPIOF_OSPEEDR *((volatile unsigned int *)(0x40021400+0x08)) //值强制转化为地址,通过*解引访问地址空间的值#define   GPIOF_PUPDR *((volatile unsigned int *)(0x40021400+0x0C)) //值强制转化为地址,通过*解引访问地址空间的值#define   GPIOF_BSRR *((volatile unsigned int *)(0x40021400+0x18)) //值强制转化为地址,通过*解引访问地址空间的值

(3)配置好外设使能寄存器,打开GPIOF组时钟,也叫做使能F组时钟(STM32当中外设的时钟不打开,降低功耗)

//使能GPIO F组时钟,RCC_AHB1ENR|= (0x01<<5);

(4)配置好GPIO9组的寄存器

把GPIOF9 引脚设置为输出模式 输出推挽 上拉  速度

设置GPIOF9引脚对应的是18、19位 ,然后为输出模式:01,其他寄存器也类似,如图下所示

void Led_Init(void){  //使能GPIO F组时钟,  RCC_AHB1ENR |= (0x01<<5);

  //设置为输出模式  GPIOF_MODER &= ~(0x01<<19); //19位置0  GPIOF_MODER |= (0x01<<18); //18位置1

  //输出推挽  GPIOF_OTYPER &= ~(0x01<<9); //9位置0

  //快速  GPIOF_OSPEEDR |= (0x01<<19); //19位置1  GPIOF_OSPEEDR &= ~(0x01<<18); //18位置0

  //上拉  GPIOF_PUPDR &= ~(0x01<<19); //19位置0  GPIOF_PUPDR |= (0x01<<18); //18位置1

}

点灯来了......

通过手册查找用来点灯的寄存器,就是这个GPIOx_BSRR寄存器

在25位 ,置1,灯会亮

在9位 ,置1,灯会灭

main.c

#include "stm32f4xx.h"#include "led.h"

#define COUNT 100

//粗延时void  delayms(int n){  int i, j;

  for(i=0; i    for(j=0; j<40000; j++);

}

int main(void){  //LED灯初始化  Led_Init();

  while(1)  {    GPIOF_BSRR |= (0x01<<25); //25位置1 灯亮    delayms(COUNT);    GPIOF_BSRR |= (0x01<<9); //9位置1 灯灭

  }  return 0;}

成功点亮一盏灯,至于流水灯,设置好一些灯,然后用延时控制灯的亮与灭

接下来的笔记是库函数开发,按键中断等等......

记录点点滴滴的笔记欢迎关注,共同学习

小浩笔记

stm32f407 spi3 mosi没有输出_入门篇 | STM32F407寄存器开发点灯相关推荐

  1. stm32f407 spi3 mosi没有输出_正点原子STM32F407探索者开发板资料连载第56章 USB 读卡器实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十六章 USB 读 ...

  2. stm32f407手册_入门篇 | STM32F407库函数开发L按键控制Led灯

    让文化·去旅行 点击上方蓝字可以关注我们哦 按键控制灯的亮与灭的效果图: 一.寄存器开发与库函数开发的优缺点 1.寄存器开发 缺点: (1)开发难度大,查阅相关手册比较多 (2)开发效率相对低,产品周 ...

  3. Android学习路线_入门篇(一)编写简单的APP

    Android学习入门的目标就是能够编写出一个完整的APP,有可交互的界面,有基本的功能,有本地的数据库,有与后台的数据交换.在本文我们会了解到如何在AndroidStudio中新建.运行.打包一个A ...

  4. 今日头条ocpm计费规则_入门篇|信息流广告的游戏规则—竞价机制

    原文链接:入门篇|信息流广告的游戏规则-竞价机制 信息流广告竞价机制就是游戏规则,如果打游戏对游戏规则不了解,打好一把游戏就比较难. 一.信息流广告出价方式 非智能出价 CPA (Cost Per A ...

  5. mysql自动填充测试数据库_入门篇(三):通过填充器快速填充测试数据

    入门篇(三):通过填充器快速填充测试数据 由 学院君 创建于2年前, 最后更新于 1年前 版本号 #3 11119 views 9 likes 0 collects 我们在前两篇教程中分别介绍了如何连 ...

  6. 单选选择才可以提交_第二篇:DJANGO开发产品选择表amp;调查问卷

    锅大虾:第一篇:DJANGO开发产品选择表&调查问卷​zhuanlan.zhihu.com 三.调查问卷部分 前端实现效果:首页 首页效果图 需求: 1.单项.多项选择,并且随意增加" ...

  7. kotlin开发Android入门篇八Kotlin开发Android的基本使用

    基础篇:Kotlin开发Android的基本使用 使用AndroidStudio3.0及以上开发Kotlin在新建项目中勾选这个选项则会默认开发语言为Koltin,然后再gradle(Project的 ...

  8. 什么是好的数据结构_入门篇|我一个学渣是如何一步步自学数据结构的?

    来源 |  一个不甘平凡的码农   链接: https://mp.weixin.qq.com/s/b--HVdmySAHb-wKAB3ZcbA    写在前边 -------------------- ...

  9. 安卓用于组件传递参数的对象是_入门篇:7.组件2:Android Service-service的数据传递与通信...

    (由于对java的回调机制和线程理解的不够透彻,所以这块内容我理解了好久,尤其是绑定服务传递数据,一句一句写一句一句看,对我来说挺难理解的.以后还要多看几遍--!) 既然单纯的启动或跳转activit ...

最新文章

  1. 第二十二课.DeepGraphLibrary(三)
  2. 《潜伏》走红背后的心理原因
  3. CodeForces - 1326E Bombs(线段树+思维)
  4. 三羊献瑞(暴力破解)
  5. android 界面跳转封装,【Android】Fragment跳转系列
  6. kafka清理数据日志
  7. visualmap超过范围改变颜色_高动态范围(High-Dynamic Range,简称HDR)
  8. 分数的全面解析式与在C语言中应用分数计算
  9. python 打开xml文件修改其中的值,通过点选图像获得其像素值
  10. MyEclipse自定义JSP模板
  11. 关于模拟信号和数字信号的储存
  12. NMOS和PMOS导通电流 走向
  13. HDU-4826 Labyrinth
  14. python展望_python学习的一点随想与展望
  15. 积目服务器维护,搭建经济高效的制作网络服务器群试验平台
  16. ae教程(二)文字类
  17. 数学考研基础---线代笔记(行列式)
  18. 仿站高手是怎么练成的 分析仿站必备知识总结
  19. 【转】交换机开发(一)—— 交换机的工作原理
  20. 微博报错:Ip Limit, request ip is not contained in safety ip error_code:10004/2/status

热门文章

  1. 关于为什么说OLTP必须要求变量绑定而OLAP不应该绑定变量的原因
  2. Python学习第三天
  3. github网页链接
  4. Error: Cannot Determine the location of the VS common tools folder
  5. 【体验】Silverlight 2.0 多图
  6. System.Data.Entity.Core.MetadataException:“Unable to load the specified metadata resource.”
  7. 微信网页开发 thinkphp5.0的try-catch和重定向
  8. 18.9.22 考试总结
  9. springboot集成Spring Security oauth2(八)
  10. javascript第三节