STM32入门第一步——点亮GPIO(实验报告版)

  • 说明

(1)这里我分配的管脚号:PC2、PC3

(2)测试电路实物电路图

实验名称:GPIO实验

实验目的:用PC2、PC3管脚交替点亮两个LED灯

实验内容:封装成指令,设计程序,完成两个LED 灯交替点亮。

实验方法:通过写指令,设计程序来调控寄存器的值从而控制管脚的输出。

实验分析:

  • 配置管脚

  1. 使能GPIOC时钟

寄存器:RCC->AHB1ENR

需要修改内容:bit2置1

指令:RCC->AHB1ENR |=0x1<<2;//使能时钟

(RCC->AHB1ENR与0x100的或运算,即将bit2置1)

  1. PC2、3为输出模式

寄存器:GPIOC->MODER

需要修改内容:bit4、5和6、7分别置01

指令:GPIOC->MODER =(GPIOC->MODER&~(0xF<<4))|(0x5<<4);//输出模式

(清零:先将MODER与0x00001111进行与运算,即清零

置01:再讲MODER与0x01010000进行或运算,即值01)

  1. PC2、3为推挽模式

寄存器:GPIOC->OTYPER

需要修改内容:bit2、3置0

指令:GPIOC->OTYPER&=~(0x3<<2);//推挽输出

  1. PC2、3为高速

寄存器:GPIOC->OSPEEDR

需要修改内容:bit4、5和6、7分别置10

指令:GPIOC->OSPEEDR=(GPIOC->OSPEEDR&~(0xF<<4))|(0xC<<4);//高速

  1. PC2输出为低,PC3输出为高

寄存器:GPIOC->ODR

需要修改内容:bit2置0,bit3置1

指令:GPIOC->ODR = GPIOC->ODR&~(0x3<<2)|(0x1<<3);

6.PC2输出为高,PC3输出为低

寄存器:GPIOC->ODR

需要修改内容:bit2置1,bit3置0

指令:GPIOC->ODR = GPIOC->ODR&~(0x3<<2)|(0x1<<2);

  • 函数化

初始化函数

void Ledlnit(void)
{
	RCC->AHB1ENR |=0x1<<2;//使能时钟
	GPIOC->MODER =(GPIOC->MODER&~(0xF<<4))|(0x5<<4);//输出模式
	GPIOC->OTYPER&=~(0x3<<2);//推挽输出
	GPIOC->OSPEEDR=(GPIOC->OSPEEDR&~(0xF<<4))|(0xC<<4);//高速
	
	GPIOC->ODR |=0x3<<2;
}

延时1s函数

void Delay(void)

{

   unsigned int i;

   for(i=4000000;i>0;i--);

}

控制灯亮灭函数

void LedFlash(int on)

{

   if(on)

      GPIOC->ODR = GPIOC->ODR&~(0x3<<2)|(0x1<<3);

   else

      GPIOC->ODR = GPIOC->ODR&~(0x3<<2)|(0x1<<2);

}

这里若on为1,则PC3输出为高、PC2输出为低

若on为0,反之。

  • 程序设计

#include "stm32f4xx.h"
void Ledlnit(void)
{
	RCC->AHB1ENR |=0x1<<2;//使能时钟
	GPIOC->MODER =(GPIOC->MODER&~(0xF<<4))|(0x5<<4);//输出模式
	GPIOC->OTYPER&=~(0x3<<2);//推挽输出
	GPIOC->OSPEEDR=(GPIOC->OSPEEDR&~(0xF<<4))|(0xC<<4);//高速
	
	GPIOC->ODR |=0x3<<2;
}
void LedFlash(int on)
{
	if(on)
		GPIOC->ODR = GPIOC->ODR&~(0x3<<2)|(0x1<<3);//GPIOC->ODR|=(0x1<<2); //breathe
	else
		GPIOC->ODR = GPIOC->ODR&~(0x3<<2)|(0x1<<2);//GPIOC->ODR&=~(0x1<<2);
}
void Delay(void)
{
	unsigned int i;
	for(i=4000000;i>0;i--);
}
int main()
{
	Ledlnit();
	while(1)
	{
		LedFlash(1);
		Delay();
		LedFlash(0);
		Delay();
	}
	return 0;
}

至此就完成了GPIO交替点亮LED灯的实验啦!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值