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(1)跑马灯 -> 正文阅读

[嵌入式]STM32(1)跑马灯

建立LED初始化头文件

建立头文件有点像C++中,头文件中可以添加宏定义以及函数原型,然后在.c文件中写入函数定义

“sys.h”

“sys.h"这个头文件中#include “stm32f10x.h”,所以自己写的文件不需要再引用"stm32f10x.h”
还包括了IO口操作宏定义,IO口地址映射,IO口操作以及其他
stm32 sys文件总结

PBout(5)

PBout(5)就是sys文件中的宏定义内容:#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
它指向了控制PBn所在的寄存器,对其进行操作。
#define LED0 PBout(5)//LED0
这里的LED0就是指PB5这个IO口

led.h 代码

#ifndef _LED_H
#define _LED_H
#include "sys.h"

//宏定义
#define LED0 PBout(5)//LED0
#define LED1 PEout(5)//LED1
//led.c
 void LED_Init(void);
 #endif

建立LED初始化程序

GPIO

每个IO口都有7个寄存器来控制:
2个32位端口配置寄存器CRL和CRH
2个32位的数据寄存器IDR和ODR
1个32位的置位/复位寄存器BSRR
1个16位的复位寄存器BRR
1个32位的锁存寄存器LCKR
其中,CRL和CRH控制着每个IO口的模式及输出速率

GPIO的八种工作模式

GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出

1、上拉输入、下拉输入可以用来检测外部信号,例如,按键等;
2、浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的 I2C、 USART 的接收端;
3、普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。而普通开漏输出模 式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部一个上拉电 阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输 出 5V 电平。
4、对于相应的复用模式(复用输出来源片上外设),则是根据 GPIO 的复用功能来 选择,如 GPIO 的引脚用作串口的输出(USART/SPI/CAN),则使用复用推挽输出模式。 如果用在 I2C、SMBUS 这些需要线与功能的复用场合,就使用复用开漏模式。
5、在使用任何一种开漏模式时,都需要接上拉电阻。

GPIO_InitTypeDef

GPIO_InitTypeDef是一个结构体类型,具体定义如下

typedef struct
{
  uint32_t Pin;       /*!< 指定要配置的GPIO引脚。
  uint32_t Mode;      /*!< 指定选定接点的操作模式。
  uint32_t Pull;      /*!< 指定选定接点的上拉或下拉激活。
  uint32_t Speed;     /*!< 指定选定接点的速度。
}GPIO_InitTypeDef;

a)GPIO_pins_define 中的所有可选择的值,代表各个引脚。

#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */ 
#define GPIO_PIN_MASK              0x0000FFFFU /* PIN mask for assert test */

b)GPIO_mode_define 中的所有可选择的值,代表可选的GPIO配置模式。

#define  GPIO_MODE_INPUT                        0x00000000U   /*!< 输入浮动模式 */             
#define  GPIO_MODE_OUTPUT_PP                    0x00000001U   /*!< 输出推拉模式 */            
#define  GPIO_MODE_OUTPUT_OD                    0x00000011U   /*!< 输出开漏模式 */               
#define  GPIO_MODE_AF_PP                        0x00000002U   /*!< 交替功能推拉模式 */
#define  GPIO_MODE_AF_OD                        0x00000012U   /*!< 交替功能开漏模式 */
 
#define  GPIO_MODE_ANALOG                       0x00000003U   /*!< 模拟模式  */
    
#define  GPIO_MODE_IT_RISING                    0x10110000U   /*!< 带上升沿触发检测的外部中断模式 */
#define  GPIO_MODE_IT_FALLING                   0x10210000U   /*!< 带下降沿触发检测的外部中断模式 */
#define  GPIO_MODE_IT_RISING_FALLING            0x10310000U   /*!< 带上升/下降沿触发检测的外部中断模式 */
 
#define  GPIO_MODE_EVT_RISING                   0x10120000U   /*!< 具有上升沿触发检测的外部事件模式 */
#define  GPIO_MODE_EVT_FALLING                  0x10220000U   /*!< 具有下降沿触发检测的外部事件模式 */
#define  GPIO_MODE_EVT_RISING_FALLING           0x10320000U   /*!< 具有上升/下降沿触发检测的外部事件模式 */

c)GPIO_pull_define 中的所有可选择的值,配置激活状态。通过设置GPIO中的PUPDR寄存器的值。

#define  GPIO_NOPULL        0x00000000U   /*!< 无上拉或下拉激活  */
#define  GPIO_PULLUP        0x00000001U   /*!< 上拉激活         */
#define  GPIO_PULLDOWN      0x00000002U   /*!< 下拉激活         */

d)GPIO_speed_define 中的所有可选择的值,配置输出最大功率。通过设置GPIO中的OSPEEDR寄存器的值。

#define  GPIO_SPEED_FREQ_LOW         0x00000000U  /*!< IO工作频率为2 MHz,请参阅产品数据表 */
#define  GPIO_SPEED_FREQ_MEDIUM      0x00000001U  /*!< 范围12.5 MHz至50 MHz */
#define  GPIO_SPEED_FREQ_HIGH        0x00000002U  /*!< 范围为25兆赫至100兆赫 */
#define  GPIO_SPEED_FREQ_VERY_HIGH   0x00000003U  /*!< 范围50兆赫至200兆赫 */

嵌入式开发(学习笔记:跑马灯)GPIO_InitTypeDef+SysTick_Type

HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)

其实就是将对应的字节输入到对应的寄存器中来配置IO口
HAL库-STM32F4 HAL_GPIO_Init()
stm32库函数之GPIO_Init()详细解析

HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinSate)

通过设置ODR寄存器的值来控制IO口的输出状态。ODR是一个端口输出数据寄存器,该寄存器可读写,从该寄存器读出来的数据可以用于判断当前IO口的输出状态。而向该寄存器写数据,则可以控制某个IO口的输出电平

HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

读取某个IO口的状态。读的是IDR寄存器,该寄存器是端口输入数据寄存器,该寄存器是只读寄存器。

__HAL_RCC_GPIOB_CLK_ENABLE()

在配置STM32外设时,任何时候都要先使能该外设的时钟。
用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗。
使能就是打开该功能。
STM32时钟使能及应用总结

led.c 代码

#include"led.h"
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_Initure;//创建GPIO初始化参数结构体
	__HAL_RCC_GPIOB_CLK_ENABLE();//开启GPIOB时钟
	__HAL_RCC_GPIOE_CLK_ENABLE();//开启GPIOE时钟
	
	//PB5初始化
	GPIO_Initure.Pin=GPIO_PIN_5;//选择引脚
	GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;//输出输出模式
	GPIO_Initure.Pull=GPIO_PULLUP;//上拉下拉
	GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//输出速度
	HAL_GPIO_Init(GPIOB,&GPIO_Initure);//初始化函数
	
	//PE5初始化
	GPIO_Initure.Pin=GPIO_PIN_5;//选择引脚
	HAL_GPIO_Init(GPIOE,&GPIO_Initure);//初始化函数
	
	//HAL_GPIO_WritePin(GPIO组,IO口,输出状态),PinState:高电频——GPIO_PIN_SET; 低电频——GPIO_PIN_RESET
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//PB5置1,默认初始化后灭灯
	HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);//PE5置1,默认初始化后灭灯
	
	
}

main代码

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main(void)
{
	HAL_Init();//初始化HAL库
	Stm32_Clock_Init(RCC_PLL_MUL9);//设置时钟,72M
	delay_init(72);//初始化延时函数
	LED_Init();//初始化LED
	while(1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//LED0亮
		HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);//LED1灭
		delay_ms(500);//延时500ms
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//LED0灭
		HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);//LED1亮
		delay_ms(500);//延时500ms
		
	}
	
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:31:28  更:2022-10-22 21:33:05 
 
开发: 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/25 21:48:27-

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