硬件小分队第二次任务报告

第二次任务不完全报告

  • 任务内容
    LED灯初始设置每过两秒闪一下,按一次按键,闪烁间隔减少0.5s,等间隔到0秒之后,led由闪烁变为呼吸灯,并且蜂鸣器开始播放音乐小星星。
  • 任务完成情况
    刚开始的时候没有找到合适的学习的方法,很多次的死脑经,很多次的绕弯路都使得我的效率不高。其实仍有部分功能我尚未实现,让蜂鸣器唱出小星星,以及外部中断按键的防抖。我想过很多办法都没有完成其功能。
  • 代码及解释

主函数

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();

  /* USER CODE BEGIN Init */
	#define WAKEUP HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)
  /* USER CODE END Init */

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

  /* USER CODE BEGIN SysInit */

	uint16_t pwm_value = 2000;
	uint16_t step = 100;
	uint16_t pwm_value2 = 2000;
	uint16_t step1;
  uint16_t it =0;
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_TIM9_Init();
  MX_TIM12_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim3);     //启动TIM3定时器
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		if(pwmt == 1)          //当LED常亮时打开PWM呼吸灯模式
		{
	HAL_Delay(10);  
  if(pwm_value == 0) step = 50;
  if(pwm_value == 2000) step = -50;
  pwm_value += step;
  user_pwm_setvalue(pwm_value);          //呼吸灯的PWM
  if(pwm_value2 == 0) step1 = 100;
  if(pwm_value2 == 2000) step1 = -100;      
  pwm_value2 += step1;
  user_pwm_setvalue2(pwm_value2);      //蜂鸣器的PWM
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

定时器

是利用将亮的时间与LED灯暗的时间由每次进入定时器的次数来决定的

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == htim3.Instance)
    {
			t += 1;
			if(t%tiim == 0)
			{
				HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
				t = 0;
			}
			else
				HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
    }
}

PWM定时器

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{

	  if(GPIO_Pin == GPIO_PIN_2)
  {
		HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);

		if(b == 0)
		{
			tiim = 53;
			b ++;
		}
		if(b == 1)
		{
			tiim = 36;
			b ++;
		}
		if(b == 2)
		{
			tiim = 19;
			b ++;
		}
		if(b == 3)
		{
			tiim = 1;
			b = 3;
			HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
			HAL_TIM_Base_Stop_IT(&htim3);      //关闭TIM3定时器
			pwmt = 1;
			HAL_TIM_PWM_Start(&htim9, TIM_CHANNEL_1);
			HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1);      
			//打开两个PWM定时器
		}
  }
}

初始化PWM

void user_pwm_setvalue(uint16_t value)
{
    TIM_OC_InitTypeDef sConfigOC;
 
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim9, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim9, TIM_CHANNEL_1);   
}
void user_pwm_setvalue2(uint16_t value2)
{
    TIM_OC_InitTypeDef sConfigOC;
 
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value2;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1);   
}

(学习使用函数库主要来自于微雪)
视频展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Atom明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值