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

查看: 6801|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版