STM32 | PWM脉冲宽度调制(第五天按键中断,控制电机正/反转、加速、减速、暂停与继续源码解析)

STM32 | PWM脉冲宽度调制(第五天)
STM32 | PWM脉冲宽度调制(第五天呼吸灯源码解析)
STM32 | PWM脉冲宽度调制(第五天电机速度控制源码解析)

PWM 技术在以下其他机器学习领域和应用中也可以发挥作用:

  • 自然语言处理 (NLP):调节文本生成模型(例如 GPT-3)的输出长度和多样性。

  • 强化学习:控制代理在环境中采取行动的频率和持续时间。

  • 时间序列预测:调节模型预测未来事件的时间间隔。

  • 异常检测:设置阈值来检测超出正常范围的数据点。

  • 优化:控制超参数调整算法的探索和利用阶段之间的平衡。

具体应用示例:

  • **音乐生成:**使用 PWM 来控制生成的音乐片段的长度和复杂度。

  • **机器人控制:**调节机器人的动作速度和持续时间,以实现平稳和高效的运动。

  • **医疗诊断:**使用 PWM 来优化诊断算法的灵敏度和特异性。

  • **金融预测:**控制模型预测股票价格或汇率的时间间隔。

  • **自动驾驶:**调节自动驾驶汽车在不同交通状况下的决策频率。

PWM 技术的通用性使其成为机器学习中调节模型行为和提高性能的宝贵工具。

1、使用按键中断,控制电机正/反转、加速、减速、暂停与继续。

PA2 与 PA3

【led.h】

#ifndef __LED_H#define __LED_H#include "stm32f4xx.h"#define LED0_ON    GPIO_ResetBits(GPIOF, GPIO_Pin_9)#define LED0_OFF  GPIO_SetBits(GPIOF, GPIO_Pin_9)void Led_Init(void);#endif

【led.c】

#include "led.h"/*********************************引脚说明:LED0 -- PF9LED1 -- PF10LED2 -- PE13LED3 -- PE14**********************************/void Led_Init(void){
    GPIO_InitTypeDef  GPIO_InitStruct;  //使能GPIOE组时钟  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);      //使能GPIOF组时钟  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);    GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9|GPIO_Pin_10;    //引脚9 10  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;  //输出模式  GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;  //推挽输出  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;    //上拉  GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_50MHz; //速度   GPIO_Init(GPIOF, &GPIO_InitStruct);  GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_13|GPIO_Pin_14;    //引脚13 14  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;  //输出模式  GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;  //推挽输出  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;    //上拉  GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_50MHz; //速度   GPIO_Init(GPIOE, &GPIO_InitStruct);    GPIO_SetBits(GPIOF, GPIO_Pin_9);  GPIO_SetBits(GPIOF, GPIO_Pin_10);  GPIO_SetBits(GPIOE, GPIO_Pin_13);  GPIO_SetBits(GPIOE, GPIO_Pin_14);}

【delay.h】

#ifndef __DELAY_H#define __DELAY_H#include "stm32f4xx.h"void Delay_Init(void);void delay_us(u32 nus);void delay_ms(u32 nms);#endif

【delay.c】

#include "delay.h"//u32 == unsigned intu32 my_us = 21;        //计21个数用1usu32 my_ms = 21000;      //计21000个数用1msvoid Delay_Init(void){
    //SysTick时钟配置 168MHZ/8 = 21MHZ  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);}//nus取值范围:1~798 915void delay_us(u32 nus){
    u32 temp = 0;  //设置重装值寄存器  SysTick->LOAD = my_us*nus - 1;  //设置计数器的值为0  SysTick->
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Qt历险记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值