历史上的今天
今天是:2024年09月10日(星期二)
2018年09月10日 | STM32L151 PWM输出示例
2018-09-10 来源:eefocus
最近做个项目,需要用PWM控制4线风扇的速度,调试完后顺便将其记录下来.
typedef struct {
u16 pwm_change_flag;
u16 pwm_value;
}Pwm_Fan_t;
Pwm_Fan_t Pwm_Fan;
void Pwm_Param_Init(void)
{
Pwm_Fan.pwm_change_flag=0;
Pwm_Fan.pwm_value=80;
}
//PD14->TIM4_CH3
void PWM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // 复用推挽输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
/****************************************************************
2017年8月14日14:37:57:cpu的风扇是使用25Khz pwm来调制的
***************************************************************/
void TIM4_Config(u16 pwm)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* PWM信号电平跳变值 */
u16 CCR3;
if(pwm>160-1)
pwm=160-1;
CCR3=pwm;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_TIM4); //对于L系列的,这句千万别漏掉了
TIM_Cmd(TIM4, DISABLE);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period =160 - 1;//0xEA5F;
TIM_TimeBaseStructure.TIM_Prescaler = 8-1; //设置预分频:预分频=2,即为72/3=24MHz
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分频系数:不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数溢出模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: Channel3 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR3; //设置跳变值,当计数器计数到这个值时,电平发生跳变
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_Low; //当定时器计数值小于CCR1时为低电平
TIM_OC3Init(TIM4, &TIM_OCInitStructure); //使能通道3
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIM4重载寄存器ARR
/* TIM4 enable counter */
TIM_Cmd(TIM4, ENABLE); //使能TIM4
}
史海拾趣
|
电子技术课程设计题目:秒表(要求:能精确显示0.01秒的变化;能同时对3个不同事件进行计时:比如长跑前三名) 电子技术课程设计题目:秒表(要求:能精确显示0.01秒的变化;能同时对3个不同事件进行计时:比如长跑前三名) … 查看全部问答> |
|
感觉USB,可深可浅. 浅的 不管三七二十一拿例子程序来仿,可能凑巧凑合着也能用. 深的,深不可测 香帮主能不能出点力,帮小白们普及点USB应用知识啊? 在上海或者南京什么地方办个班吧,2~5天时间,收费300~1000元… 查看全部问答> |
|
请教各位电子技术方面的前辈:本人是维修初学者,最近在给SAMSUNG K9F4G08U0A芯片写入原程序后,再读出写入后的程序发现写入后的程序与原程序大总份地方都不正确,编程器根本就没有办法检验,不知道是怎么回事?请各位前辈多多指教,因本人刚开始学 ...… 查看全部问答> |
|
我公司有个触摸屏是用wince英文系统的,我们电脑和触摸屏的故障信息是同步的,但是电脑改成中文故障信息后,触摸屏不能显示出中文故障,只显示乱码。 我应该怎么弄才能显示出来啊。… 查看全部问答> |
|
使用MAX485(单独USB供电)转换电平和485转USB,串口助手收发数据 逻辑是:PC通过串口助手发送数据给单片机使之进入中断后单片机将数据发送给PC。实验现象是:1:单片机通过485直接发送数据(不用中断),接收正确。2:使用串口中断后,在串口助手中 ...… 查看全部问答> |




