天天看点

STM32F103个人学习基础篇(1)STM32F103个人学习基础篇(1)

STM32F103个人学习基础篇(1)

  • 流水灯程序的写法与详解
  • 按键程序的写法与详解

流水灯程序的写法与详解

要制作一个流水灯程序,首先应该配置野火板上相对应的引脚PG12~15(因为每个板子都不同还是得找到板子所对应的原理图在进行配置),将他们选为输出类型,在选择configuration项进行PG12~15的配置(例如输出高低电平,模式,速度的配置和用户标签的写入)
STM32F103个人学习基础篇(1)STM32F103个人学习基础篇(1)
STM32F103个人学习基础篇(1)STM32F103个人学习基础篇(1)

其次就是用户代码的写入,制作流水灯只需要用到两个.c文件,一个是main.c文件,另一个就是stm32f1XX-hal-gpio.c文件。

打开stm32f1XX-hal-gpio.c文件找到翻转函数(翻转函数就是将参数中对应的GPIO引脚不断的来回置1和置0)

/**
  * @brief  Toggles the specified GPIO pin
  * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral 
  * @param  GPIO_Pin: Specifies the pins to be toggled.
  * @retval None
  */
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));

  GPIOx->ODR ^= GPIO_Pin;
}
           
接下来打开main.c文件找到while循环(while(1)是一个死循环在里面的函数会不断的被调用和执行),因为要达到流水灯的效果所以还要添加一个HAL_Delay函数,而这个函数内的参数则是延迟的毫秒数(由个人定最好是几百毫秒这样效果比较明显)
while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
        HAL_GPIO_TogglePin(GPIOG,LED1_Pin);
    HAL_Delay();
        HAL_GPIO_TogglePin(GPIOG,LED2_Pin);
    HAL_Delay();
        HAL_GPIO_TogglePin(GPIOG,LED3_Pin);
    HAL_Delay();
        HAL_GPIO_TogglePin(GPIOG,LED4_Pin);
    HAL_Delay();

  }
  /* USER CODE END 3 */

}
           

程序写完之后进行编译然后下载到板子上查看流水灯效果

按键程序的写法与详解

要制作一个按键程序,首先应该配置野火板上相对应的引脚PF8~PF11,将他们设置为输入类型,再选择configuration项进行PF8~PF11的配置(其中在上拉和下拉电阻选择是选择上拉电阻),为了更直观的看到按键的效果,我们这里做的是按键按下熄灭led灯的程序
STM32F103个人学习基础篇(1)STM32F103个人学习基础篇(1)
STM32F103个人学习基础篇(1)STM32F103个人学习基础篇(1)
uint16_t  key_dn=;(全局变量)
void HAL_SYSTICK_Callback(void)//滴答定时器的回调函数
{
  static uint16_t key_o=x0f00;//PF8~,老按键状态key_o=
  uint16_t key_n=;//新按键状态
  static uint8_t b=;//静态检测按键变量 
  if(++b>=)
  {
    if(HAL_GPIO_ReadPin(GPIOF,k1_Pin))
      key_n|=k1_Pin;
    if(HAL_GPIO_ReadPin(GPIOF,k2_Pin))
      key_n|=k2_Pin;
    if(HAL_GPIO_ReadPin(GPIOF,k3_Pin))
      key_n|=k3_Pin;
    if(HAL_GPIO_ReadPin(GPIOF,k4_Pin))
      key_n|=k4_Pin;
     key_dn=(key_n^key_o)&key_o;//当按键按下key_o为x0000是key_dn按键被按下的那位就会被赋值为
     key_o=key_n;
     b=;
  }
 }
           
再main.c中找到while(1)循环, 在其中写上按键按下的判断语句以及按键按下后led的变化控制函数
while ()
  {
        if(key_dn)
        {
            if(key_dn&k1_Pin)
            {
                HAL_GPIO_WritePin(GPIOG,led1_Pin,GPIO_PIN_SET);
            }
                if(key_dn&k2_Pin)
            {
                HAL_GPIO_WritePin(GPIOG,led2_Pin,GPIO_PIN_SET);
            }
                if(key_dn&k3_Pin)
            {
                HAL_GPIO_WritePin(GPIOG,led3_Pin,GPIO_PIN_SET);
            }
                if(key_dn&k4_Pin)
            {
                HAL_GPIO_WritePin(GPIOG,led4_Pin,GPIO_PIN_SET);
            }
        }
}
           
写完函数之后编译下载看到的效果应该是,刚开始led灯是全亮状态,当对应按键按下后led灯也会熄灭

继续阅读