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

目录

一、GPIO介绍  

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

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


 一、GPIO介绍

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

STM32--基于固件库(Library Faction)的流水灯、静态数码管_第1张图片

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

STM32--基于固件库(Library Faction)的流水灯、静态数码管_第2张图片

         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时不会发生危险。

STM32--基于固件库(Library Faction)的流水灯、静态数码管_第3张图片 STM32--基于固件库(Library Faction)的流水灯、静态数码管_第4张图片

 

 

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

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

main.c
#include "stm32f10x.h"
#include 

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<
#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);

#endif



flowing water.c
#include 

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 

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<

你可能感兴趣的:(stm32&标准库,stm32,嵌入式硬件,单片机)