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 -- PF9
LED1 -- PF10
LED2 -- PE13
LED3 -- 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 int
u32 my_us = 21; //计21个数用1us
u32 my_ms = 21000; //计21000个数用1ms
void Delay_Init(void)
{
//SysTick时钟配置 168MHZ/8 = 21MHZ
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
}
//nus取值范围:1~798 915
void delay_us(u32 nus)
{
u32 temp = 0;
//设置重装值寄存器
SysTick->LOAD = my_us*nus - 1;
//设置计数器的值为0
SysTick-