STM32 GPIO实验_交替输出高低电平

1.实验目的:

使PB5和PE5交替输出高低电平。

以固定的周期让当PB5输出高电平时PE5输出低电平,反之当PB5输出低电平时PE5输出高电平。

2.头文件和声明子函数:延时函数用于提供固定的变化周期。

#include "stm32f10x.h"							         //包含STM32F1系列微控制器的头文件

void delay_ms(unsigned short int Number);		         //声明延时函数

3.1主函数部分1:初始化PB5和PE5引脚。


	GPIO_InitTypeDef GPIO_InitStructure;			     //定义结构体变量
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PB口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//使能PE口时钟
	
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;	         //对PB5引脚进行设置
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //频率最高50MHz
    GPIO_Init(GPIOB, &GPIO_InitStructure);               //初始化引脚
	 
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;	         //对PE5引脚进行设置
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //频率最高50MHz
    GPIO_Init(GPIOE, &GPIO_InitStructure);               //初始化引脚	
	

3.2主函数部分2:PB5和PE5一个置高电平(熄灭)一个置低电平(点亮),延时后翻转状态就可以看见亮灭效果,并无限循环。


  while(1)
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_5);	             //PB5输出高电平
        GPIO_ResetBits(GPIOE, GPIO_Pin_5);	             //PE5输出低电平			
		delay_ms(500);                                   //延时(大约0.5s)
		GPIO_ResetBits(GPIOB, GPIO_Pin_5);	             //PB5输出低电平	
		GPIO_SetBits(GPIOE, GPIO_Pin_5);	             //PE5输出高电平
		delay_ms(500);                                   //延时(大约0.5s)
     }

4.延时函数:


void delay_ms(unsigned short int Number)                 //延时函数
{
    unsigned int i;
    while(Number--)
    {
       i=12000; while(i--);
    }
}

5.1完整代码:

#include "stm32f10x.h"							         //包含STM32F1系列微控制器的头文件

void delay_ms(unsigned short int Number);		         //声明延时函数

int main(void)                                           //主函数
{
	GPIO_InitTypeDef GPIO_InitStructure;			     //定义结构体变量
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PB口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//使能PE口时钟
	
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;	         //对PB5引脚进行设置
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //频率最高50MHz
    GPIO_Init(GPIOB, &GPIO_InitStructure);               //初始化引脚
	 
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;	         //对PE5引脚进行设置
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //频率最高50MHz
    GPIO_Init(GPIOE, &GPIO_InitStructure);               //初始化引脚	
	
	while(1)
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_5);	             //PB5输出高电平
        GPIO_ResetBits(GPIOE, GPIO_Pin_5);	             //PE5输出低电平			
		delay_ms(500);                                   //延时(大约0.5s)
		GPIO_ResetBits(GPIOB, GPIO_Pin_5);	             //PB5输出低电平	
		GPIO_SetBits(GPIOE, GPIO_Pin_5);	             //PE5输出高电平
		delay_ms(500);                                   //延时(大约0.5s)
	}
}

void delay_ms(unsigned short int Number)                 //延时函数
{
    unsigned int i;
    while(Number--)
    {
       i=12000; while(i--);
    }
}

5.2仿真实验:

仿真可以看出:PB5和PE5输出高低电平相反并。

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下步骤来实现stm32f103r6的gpio输出低电平使数码管转圈: 1. 首先,您需要将数码管连接到GPIO引脚。您需要查看数码管的数据表以了解每个引脚的功能和连接方式。 2. 接下来,您需要配置GPIO口为输出模式。您可以使用STM32 HAL库中的函数`HAL_GPIO_Init()`进行GPIO口的初始化。 3. 然后,您需要编写代码来使GPIO输出低电平。您可以使用STM32 HAL库中的函数`HAL_GPIO_WritePin()`来控制GPIO口的电平。 4. 最后,您需要循环控制GPIO口的电平,以使数码管转圈。您可以使用一个简单的循环结构来实现这一点,例如`for`或`while`循环。 下面是一个简单的示例代码: ```c #include "stm32f1xx_hal.h" #define GPIO_PORT GPIOA #define GPIO_PIN GPIO_PIN_0 int main(void) { HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct); for (;;) { HAL_GPIO_WritePin(GPIO_PORT, GPIO_PIN, GPIO_PIN_RESET); // 输出低电平 HAL_Delay(500); // 延时500ms HAL_GPIO_WritePin(GPIO_PORT, GPIO_PIN, GPIO_PIN_SET); // 输出电平 HAL_Delay(500); // 延时500ms } } ``` 这个例子中,我们将GPIOA的第0个引脚配置为输出模式,并使用`HAL_GPIO_WritePin()`函数控制它的电平。在循环中,我们交替输出低电平电平,以使数码管转圈。您可以根据您的具体需要修改代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值