STM32--基于固件库(Library Faction)的流水灯、静态数码管

目录

一、GPIO介绍  

二、基于固件库(Library Faction)的流水灯

三、基于固件库(Library Faction)的静态数码管


 一、GPIO介绍

GPIO库函数,对GPIO可进行一些,读写控制的操作,本文章应用的就是GPIO_Write 

 GPIO接在APB2(高速总线)上,

         AHB/APB桥(APB) 两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操 作于全速(最高72MHz)。 有关连接到每个桥的不同外设的地址映射请参考表1。在每一次复位以后,所有除SRAM和 FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外 设的时钟。

        注意: 当对APB寄存器进行8位或者16位访问时,该访问会被自动转换成32位的访问:桥会自动将8位 或者32位的数据扩展以配合32位的向量。

每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存 器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置 成多种模式。

─ 输入浮空

─ 输入上拉

─ 输入下拉

─ 模拟输入

─ 开漏输出

─ 推挽式输出

─ 推挽式复用功能

─ 开漏复用功能

        每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访 问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这 样,在读和更改访问之间产生IRQ时不会发生危险。

 

 

 

二、基于固件库(Library Faction)的流水灯

文件的搭建请参照使用MDK-ARM(KEIL V5)创建一个工程(有图有文字)_可乐CC+的博客-CSDN博客

main.c
#include "stm32f10x.h"
#include <flowingwater.h>void Delayms(uint32_t i)
{while(i--);
}int main()
{int i;LED_Init();while(1){
//		GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);//8个led同时亮、灭
//		Delayms(0xa00000);
//		GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN);
//		Delayms(0xa00000);for(i=0;i<8;i++){//	GPIO_Write(LED_GPIO_PORT,0Xfffffe<<i);//8个灯依次点亮,不熄灭GPIO_Write(LED_GPIO_PORT,~(0x000001<<i));//八个灯依次点亮,前一个熄灭Delayms(0xa00000);}}
}flowing water.h
#ifndef _FLOWINGWATER_H_
#define _FLOWINGWATER_H_#include <stm32f10x.h>
#define LED_GPIO_PORT GPIOC
#define LED_GPIO_PIN  (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)void LED_Init(void);#endifflowing water.c
#include <flowingwater.h>void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Pin = LED_GPIO_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(LED_GPIO_PORT,&GPIO_InitStruct);
}

1-初始化所需要使用的引脚,如果使用的多,可以用“|”进行合并,写在一起。

2-根据需求,对gpio口进行驱动。 

三、基于固件库(Library Faction)的静态数码管

编写静态数码管只需要在原来的基础上添加一个数组。


#include "stm32f10x.h"
#include <flowingwater.h>uint16_t  table[16]={0xffc0, 0xf9, 0xa4, 0xb0,0x99,0x92,0x82,0xf8, 0x80 ,0x90 ,0x88,0x83,0xc6 ,0xa1,0x86,0x8e};void Delayms(uint32_t i)
{while(i--);
}int main()
{int i;LED_Init();while(1){
//		GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);//8
//		Delayms(0xa00000);
//		GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN);
//		Delayms(0xa00000);for(i=0;i<16;i++){//	GPIO_Write(LED_GPIO_PORT,0Xfffffe<<i);//		GPIO_Write(LED_GPIO_PORT,~(0x000001<<i));GPIO_Write(LED_GPIO_PORT,table[i]);Delayms(0xa00000);GPIO_Write(LED_GPIO_PORT,0xffff);}}
}

本文链接:https://my.lmcjl.com/post/4615.html

展开阅读全文

4 评论

留下您的评论.