蓝桥杯物联网STM32 学习记录1——GPIO实验

ex1 GPIO输出实验

实验目的:掌握GPIO的输出功能。
实验现象:PC15输出低电平,点亮LD5指示灯。

关键代码:

int main(void)
{
  
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();//初始化了GPIO15
    while (1)
    {
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET); // PC15输出低电平,点亮LD15指示灯
    }
}

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  __HAL_RCC_GPIOC_CLK_ENABLE();// GPIOC端口时钟使能
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);//配置GPIO引脚输出电平

  /*Configure GPIO pin : PC15 */
  GPIO_InitStruct.Pin = GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}

ex2 GPIO输入实验

实验目的:掌握GPIO的输入功能。
实验现象:按下USER按键,LD5点亮,松开后熄灭。

关键代码:

int main(void)
{
    uint8_t UserKey_Value = 0;
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();//初始化ex2使用到的USER按键即GPIO_PIN_14,LD5即GPIO_PIN_15。
    while (1)
    {
        UserKey_Value = HAL_GPIO_ReadPin(GPIOC, USER_KEY);//读取一个输入IO口的电平
        if (UserKey_Value == 0)
        {
            HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_RESET);
        }
        else if (UserKey_Value == 1)
        {
            HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_SET);
        }
    }
}

static void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* GPIO Ports Clock Enable */
    __HAL_RCC_GPIOC_CLK_ENABLE();// GPIOC端口时钟使能

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);

    /*Configure GPIO pin : PC14 */
    GPIO_InitStruct.Pin = GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    /*Configure GPIO pin : PC15 */
    GPIO_InitStruct.Pin = GPIO_PIN_15;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}

结合基础实验ex2和外设实验ex4

实现user键同时开关继电器所控制的 LD5、LED0和LED1。

int main(void)
{
 	HAL_Init();
 	
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	/*
	在GPIO初始化的步骤中需要
	置GPIOC使能以响应LD5,
	置GPIOA使能以响应LED0和LED1。A
	*/
	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_GPIOC_CLK_ENABLE();
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 | GPIO_PIN_1 , GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
	    /*Configure GPIO pins : PA0 PA1 */
    GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	 GPIO_InitStruct.Pin = GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
				
	/*Configure GPIO pin : PC15 */
    GPIO_InitStruct.Pin = GPIO_PIN_15;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
	uint8_t UserKey_Value=0;
	
	while(1){
		UserKey_Value = HAL_GPIO_ReadPin(GPIOC, USER_KEY);//读取一个输入IO口的电平
        if (UserKey_Value == 0)//亮
        {
            HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOA, led0, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOA, led1, GPIO_PIN_SET);
        }
        else if (UserKey_Value == 1)//灭
        {
            HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOA, led0, GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOA, led1, GPIO_PIN_RESET);
        }
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值