51单片机/STM32F103/STM32F407学习1_点亮LED灯

本文详细介绍了单片机GPIO的基础知识,包括C语言的指针、条件判断、位操作以及如何通过STM32系列(如STM32F103和STM32F407)实现LED灯控制。文章还覆盖了51单片机的寄存器映射和GPIO功能应用。
摘要由CSDN通过智能技术生成

目录:

  • 基础知识
  • 单片机从0实现
  • 单片机GPIO介绍

参考连接:

  • 野火霸天虎教程 https://doc.embedfire.com/products/link/zh/latest/mcu/stm32/ebf_stm32f407_batianhu_v1_v2/download/stm32f407_batianhu_v1_v2.html

x.1 基础知识

x.1.1 指针中的取地址,解地址

取地址符号为&,解地址符号为*,使用如下,

int *p = &value;	// 取地址用&
*p = 1;	// 解地址用*

x.1.2 宏编译的条件判断

使用预编译宏来取消编译,

#if 0

...

#endif

x.1.3 C语言的位操作

常见的位操作有左移,右移,取反,与,或,异或,这部分参考c语言中文网,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

x.1.4 C语言的置位,清零

第六个位置这个地方设置为1,其他地方不变,使用或操作|= (1<<6)

第六个位置这个地方设置为0,其他地方不变,使用与操作&= ~ (1<<6)

第六五位置设置为0,其他地方不变,&= ~(0x03)<<6;因为0x03是11。

案例如下,孰能生巧,

在这里插入图片描述

x.2 单片机从0实现

x.2.1 51单片机

由于51单片机内部已经实现了寄存器映射,所以在这里可以直接使用寄存器别名来进行访问。

电流从正极流向负极,从高压流向低压(因为存在电势差),电子流动方向和电流流向相反。

如果LED灯的电路图如下,则只需要控制P0,0端口将数值设置为0便可以将电路点亮,

在这里插入图片描述

则代码如下便可实现LED灯的开关,

在这里插入图片描述

x.2.2. stm32f103

寄存器映射指给寄存器地址映射一个别名,这个功能可以通过reg52.hstm32f10x.h两个文件来实现。

LED灯对应的接口为PB0,则意味着是GPIOx_ODR寄存器中的GPIOB0_ODR

GPIOx_ODR是指 general purpose intput output x _ Output data register,是通过ODR来控制LED灯开关的。

  1. SOC厂商在已经有ARM芯片基础上设计了三类地址总线,为AHB,APB2,APB1总线。我们先在参考手册中第二章 存储器和总线架构中找到挂载在APB2地址总线下的GPIOB的绝对地址,

在这里插入图片描述

  1. 我们需要ODR来控制LED灯,所以我们需要找到ODR0的绝对地址,我们根据地址偏移来计算,

在这里插入图片描述

  1. 我们使用ODR0来控制PB0的端口,看了电路图我们知道要实现LED中G颜色的开关,我们需要将PB0的端口电压设置为0V,这个时候我们即将PB0设置为0便可,

在这里插入图片描述

  1. 我们需要通过CRL寄存器来告诉MCU, LED中的PB0为输出值,即配置IO口为 输出。

  2. 打开RCC的时钟寄存器。

最终我们的代码书写如下,

在这里插入图片描述

x.2.2 stm32f407

  1. 更改GPIOx_MODER模式寄存器为输出

AHB1下

  1. 更改RCC时钟控制器

AHB1下

  1. 更改GPIOx_ODR数据寄存器

AHB1下

代码如下,stm32f4xx.h文件内容,

在这里插入图片描述

main.c文件内容,

在这里插入图片描述

x.3 单片机GPIO介绍

x.3.1 GPIO简介

在这里插入图片描述

在这里插入图片描述

407有144个引脚,引脚供电大部分是5V,GPIO属于引脚,但并不是所有引脚都属于GPIO;查找每一个GPIO功能通过数据手册查找。

在这里插入图片描述

x.3.2 GPIO 功能框图讲解

GPIO功能框图如下,

在这里插入图片描述

I/O引脚就是芯片和PCB印刷电路板的解除方式,而I/O引脚的左侧则是芯片的内部电路。

BSRR 指的是bit set reset register,其中set是指置位,是低16位,输出高电平置1。reset是指复位,是指高16位,输出低电平置1。

输入输出是相对ARM芯片而言的,如果往芯片写数据叫输入,从芯片往外写数据叫输出。

在输入中TTL使得输入模拟信号,当大于1.8V时为高电平,当低于1.8V时为低电平。

输入的输入较为简单,输出则较为复杂,输出的流程图如下,

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值