arm编程实例呼吸灯(arm编程实例c语言)

Arm编程实例-呼吸灯

Arm编程是现代计算机科学中不可忽视的一部分,在嵌入式系统中它更是有着不可替代的地位,现在我们尝试使用Arm编程来实现一个简单的呼吸灯,让我们开始吧!

呼吸灯实现

呼吸灯是一种简单而有趣的灯光效果,通过模拟呼吸的变化,让LED灯在亮度和暗度之间不断切换,达到视觉上的柔和效果。要实现呼吸灯效果,我们需要使用PWM(Pulse Width Modulation)技术,通过改变电流的脉冲宽度实现对LED灯的控制。

在Arm编程中使用PWM的库函数有很多,本例中我们使用的是基于STM32的HAL库。下面是实现呼吸灯效果的Arm编程代码:


#include "stm32f4xx_hal.h"

TIM_HandleTypeDef htim4;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM4_Init(void);

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM4_Init();
HAL_TIM_Base_Start(&htim4);

uint16_t PWM_value = 0;
uint16_t PWM_step = 100;

while (1)
{
while (PWM_value < 1000) { PWM_value += PWM_step; __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, PWM_value); HAL_Delay(10); } while (PWM_value > 0)
{
PWM_value -= PWM_step;
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, PWM_value);
HAL_Delay(10);
}
}
}

void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}

static void MX_TIM4_Init(void)
{

TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim4.Instance = TIM4;
htim4.Init.Prescaler = 89;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 999;
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
HAL_TIM_MspPostInit(&htim4);
}

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

__HAL_RCC_GPIOA_CLK_ENABLE();

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);

GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

代码分析

上述代码中,我们使用了STM32F4系列的TIM4定时器,开启了PWM输出,之后进入死循环不断更新PWM占空比,使得LED灯的亮度不断变化。在不影响呼吸灯效果的前提下,可以调整PWM_step参数,以改变变化的速度。

另外,需要注意的是,该代码使用了HAL库,调用了很多库函数,需要在开发板上正确接线并配置相关的引脚才能实现呼吸灯效果。

总结

通过本例,我们了解到了如何使用Arm编程实现呼吸灯,这是一个简单而有趣的灯光效果,在嵌入式相关的应用场景中也有大量的应用。通过不断尝试和优化代码,我们可以进一步了解Arm编程的核心原理和技术,进一步提高编程水平,为嵌入式系统的开发打下坚实的基础。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/arm-rlsv.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年5月1日 下午3:40
下一篇 2023年5月1日 下午3:40

猜你喜欢