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

查看: 6791|回复: 31

[STM32F072] NUCLEOF072做个呼吸灯,频率可调

  [复制链接]

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
发表于 2015-1-8 10:15:33 | 显示全部楼层 |阅读模式
基于STM32 NUCLEOF072RB做的呼吸灯程序,呼吸频率可调整

使用的定时器是TIM2,通道这CH1,对应PA0, 几点说明:
1. 预分频器设置为48,这样PWM的工作频率为1MHZ
2. 定时器的计数值最大由PERIOD宏定义,如果指定PERIOD为499,则呼吸频率为1HZ。
3. 使用SysTick来调整呼吸灯的呼吸亮度
4. 在PA0上接一个LED灯,可以看到呼吸灯效果,调整PERIOD的值,可以得到不同的呼吸频率

PWM_LED.jpg

代码如下(关键部分):

  1. /* USER CODE BEGIN PV */
  2. #define PERIOD 499

  3. /* USER CODE END PV */

  4. /* Private function prototypes -----------------------------------------------*/
  5. void SystemClock_Config(void);
  6. static void MX_GPIO_Init(void);
  7. static void MX_TIM2_Init(void);

  8. /* USER CODE BEGIN PFP */

  9. /* USER CODE END PFP */

  10. /* USER CODE BEGIN 0 */

  11. /* USER CODE END 0 */

  12. int main(void)
  13. {

  14.   /* USER CODE BEGIN 1 */

  15.   /* USER CODE END 1 */

  16.   /* MCU Configuration----------------------------------------------------------*/

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

  19.   /* Configure the system clock */
  20.   SystemClock_Config();

  21.   /* Initialize all configured peripherals */
  22.   MX_GPIO_Init();
  23.   MX_TIM2_Init();

  24.   /* USER CODE BEGIN 2 */
  25.         HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

  26.   /* USER CODE END 2 */

  27.   /* USER CODE BEGIN 3 */
  28.   /* Infinite loop */
  29.   while (1)
  30.   {

  31.   }
  32.   /* USER CODE END 3 */

  33. }

  34. /** System Clock Configuration
  35. */
  36. void SystemClock_Config(void)
  37. {

  38.   RCC_OscInitTypeDef RCC_OscInitStruct;
  39.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  40.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  41.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  42.   RCC_OscInitStruct.HSICalibrationValue = 16;
  43.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  44.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  45.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
  46.   RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV2;
  47.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  48.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  49.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  50.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  51.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  52.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);

  53.   __SYSCFG_CLK_ENABLE();

  54. }

  55. /* TIM2 init function */
  56. void MX_TIM2_Init(void)
  57. {

  58.   TIM_ClockConfigTypeDef sClockSourceConfig;
  59.   TIM_MasterConfigTypeDef sMasterConfig;
  60.   TIM_OC_InitTypeDef sConfigOC;

  61.   htim2.Instance = TIM2;
  62.   htim2.Init.Prescaler = 47;
  63.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  64.   htim2.Init.Period = PERIOD;
  65.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  66.   HAL_TIM_Base_Init(&htim2);

  67.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  68.   HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);

  69.   HAL_TIM_PWM_Init(&htim2);

  70.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  71.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  72.   HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);

  73.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  74.   sConfigOC.Pulse = 0;
  75.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  76.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  77.   HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);

  78. }

  79. /** Configure pins as
  80.         * Analog
  81.         * Input
  82.         * Output
  83.         * EVENT_OUT
  84.         * EXTI
  85. */
  86. void MX_GPIO_Init(void)
  87. {

  88.   GPIO_InitTypeDef GPIO_InitStruct;

  89.   /* GPIO Ports Clock Enable */
  90.   __GPIOC_CLK_ENABLE();
  91.   __GPIOA_CLK_ENABLE();

  92.   /*Configure GPIO pin : PC13 */
  93.   GPIO_InitStruct.Pin = GPIO_PIN_13;
  94.   GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  95.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  96.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

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

  103. }

  104. /* USER CODE BEGIN 4 */
  105. void HAL_SYSTICK_Callback(void)
  106. {
  107.         static volatile int16_t dir = 1;
  108.         static volatile int16_t duty = 0;
  109.         if(duty == PERIOD)
  110.                 dir = -1;
  111.         if(duty == 0)
  112.                 dir = 1;
  113.         
  114.         duty += dir;
  115.         
  116.         TIM2->CCR1 = duty;
  117.         
  118. }

  119. /* USER CODE END 4 */

  120. #ifdef USE_FULL_ASSERT
复制代码



回复

使用道具 举报

35

主题

604

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-3-30
发表于 2015-1-8 10:16:12 | 显示全部楼层
下载电路的呼吸灯怎么做的啊
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
 楼主| 发表于 2015-1-8 10:18:46 | 显示全部楼层
zfz0122 发表于 2015-1-8 10:16
下载电路的呼吸灯怎么做的啊

下载电路的指示灯,一般都是直接在TX和RX线路上直接接LED灯
回复 支持 反对

使用道具 举报

35

主题

604

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-3-30
发表于 2015-1-8 10:19:38 | 显示全部楼层
netlhx 发表于 2015-1-8 10:18
下载电路的指示灯,一般都是直接在TX和RX线路上直接接LED灯

这样会不会对传输的数据有干扰啊
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
 楼主| 发表于 2015-1-8 10:21:46 | 显示全部楼层
zfz0122 发表于 2015-1-8 10:19
这样会不会对传输的数据有干扰啊

不会吧,TX上一般要接个二极管
回复 支持 反对

使用道具 举报

45

主题

1059

回帖

19

蝴蝶豆

版主

最后登录
2020-11-22
发表于 2015-1-8 10:53:38 | 显示全部楼层
话说呼吸灯是个什么概念? 就会改变频率吗?
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
 楼主| 发表于 2015-1-8 10:55:49 | 显示全部楼层
Tcreat 发表于 2015-1-8 10:53
话说呼吸灯是个什么概念? 就会改变频率吗?

这个只是演示,实际上要结合用途来确对如何呼吸
回复 支持 反对

使用道具 举报

41

主题

2476

回帖

282

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2015-1-8 10:57:26 | 显示全部楼层
Tcreat 发表于 2015-1-8 10:53
话说呼吸灯是个什么概念? 就会改变频率吗?

就是类似于人的呼吸节奏的,LED亮度渐变的
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
 楼主| 发表于 2015-1-8 10:59:28 | 显示全部楼层
Tcreat 发表于 2015-1-8 10:53
话说呼吸灯是个什么概念? 就会改变频率吗?

你在PA0上接个LED灯的明白了
回复 支持 反对

使用道具 举报

6

主题

598

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-12-9
发表于 2015-1-8 11:36:56 | 显示全部楼层
上个电路图呗斑竹?
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版