你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F072 按键中断方式控制LED 频率由慢到快  

[复制链接]
yceast 发布时间:2015-1-7 09:18
/**
  ******************************************************************************
  * File Name          : main.c
  * Date               : 30/12/2014 14:33:58
  * Description        : Main program body
  ******************************************************************************
  *
  * COPYRIGHT(c) 2014 STMicroelectronics
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx_hal.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
uint16_t nDelay = 500;
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* USER CODE BEGIN 3 */
  /* Infinite loop */
  while (1)
  {
   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
     HAL_Delay(nDelay );
     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
     HAL_Delay(nDelay );
  }
  /* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

  __SYSCFG_CLK_ENABLE();

}

/** Configure pins as
        * Analog
        * Input
        * Output
        * EVENT_OUT
        * EXTI
*/
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __GPIOC_CLK_ENABLE();
  __GPIOA_CLK_ENABLE();

  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pin : PA5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);

}

/* USER CODE BEGIN 4 */
void EXTI4_15_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI4_15_IRQn 0 */
  
     switch(nDelay)
     {
         case 500:nDelay = 400;break;
         case 400:nDelay = 300;break;
         case 300:nDelay = 200;break;
         case 200:nDelay = 100;break;
         case 100:nDelay = 80;break;
         case 80:nDelay = 50;break;
         case 50:nDelay = 40;break;
         case 40:nDelay = 30;break;
         case 30:nDelay = 20;break;
         case 20:nDelay = 10;break;
         case 10:nDelay = 9;break;
         case 9:nDelay = 8;break;
         case 8:nDelay = 7;break;
         case 7:nDelay = 6;break;
         case 6:nDelay = 5;break;
         case 5:nDelay = 4;break;
         case 4:nDelay = 3;break;
         case 3:nDelay = 2;break;
         case 2:nDelay = 1;break;
         default:nDelay = 500;break;
     }
  /* USER CODE END EXTI4_15_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  /* USER CODE BEGIN EXTI4_15_IRQn 1 */

  /* USER CODE END EXTI4_15_IRQn 1 */
}

/* USER CODE END 4 */

#ifdef USE_FULL_ASSERT

/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */

}

#endif

/**
  * @}
  */

/**
  * @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


nvic.rar

下载

5.43 MB, 下载次数: 68

收藏 4 评论58 发布时间:2015-1-7 09:18

举报

58个回答
damiaa 回答时间:2015-1-8 15:53:03
支持楼主的奉献精神!

也来改改

uint16_t delayval[19]={500,400,300,200,100,50,40,30,20,10,9,8,7,6,5,4,3,2,1};



void EXTI4_15_IRQHandler(void)
{
   static uint8_t n=0;
   if((n<=18)&&(N>0))
   n--;
   else
   n=18;
   nDelay = delayval[n];
}
yceast 回答时间:2015-1-8 10:31:59
数码小叶 发表于 2015-1-8 10:18
是自带的那个程序吗?

不是的  自己编的  频率比自带的多
yceast 回答时间:2015-1-8 16:39:26
damiaa 发表于 2015-1-8 15:53
支持楼主的奉献精神!

也来改改

谢谢分享  简洁了不少
大秦正声 回答时间:2015-1-7 09:23:39
谢谢分享
yceast 回答时间:2015-1-7 09:24:37

谢谢支持
stm32_beginner 回答时间:2015-1-7 09:41:15
板子自带的就按键控制灯闪。
Small利 回答时间:2015-1-7 10:45:12
好东西
yceast 回答时间:2015-1-7 10:56:55
stm32_beginner 发表于 2015-1-7 09:41
板子自带的就按键控制灯闪。

呵呵 频率比自带的多点
yceast 回答时间:2015-1-7 10:57:10

谢谢支持
非→你←不娶 回答时间:2015-1-7 11:08:35
哇,这个真给力,得大赞一个,对学习很有用处
拼命三郎 回答时间:2015-1-7 11:23:12
谢谢分享,这就研究下
yceast 回答时间:2015-1-7 11:23:24
谢谢支持哦
yceast 回答时间:2015-1-7 11:27:05
拼命三郎 发表于 2015-1-7 11:23
谢谢分享,这就研究下

谢谢支持哦
默默前行 回答时间:2015-1-7 11:33:06
很实用,赞一个
sirius65 回答时间:2015-1-7 17:05:52
谢谢分享 学习了
cxtarm 回答时间:2015-1-7 17:24:13
赞一个。。。
巅峰残狼 回答时间:2015-1-7 17:35:56
谢谢分享
1234下一页

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版