历史上的今天
今天是:2024年10月05日(星期六)
2018年10月05日 | STM32F411RE Nucleo笔记-按键控制PWM占空比
2018-10-05 来源:eefocus
此次用到STM32F411RENucleo开发板,用到Keil MDK5.12和STM32CubeMx软件。
首先用STM32CubeMx软件配置定时器PWM模式与按键输入IO口。

图1 PWM配置

图2 按键IO口配置
然后生成Keil工程。
用Keil打开。
首先修改有关PWM方面的代码。
PWM初始化代码如下:
void MX_TIM10_Init(void)
{
TIM_OC_InitTypeDef sConfigOC;
htim10.Instance = TIM10;
htim10.Init.Prescaler = 0;
htim10.Init.CounterMode = TIM_COUNTERMODE_UP;
htim10.Init.Period = 0;
htim10.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim10);
HAL_TIM_PWM_Init(&htim10);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim10, &sConfigOC, TIM_CHANNEL_1);
}
查看头文件stm32f4xx_hal_tim.h,可以知道定时器初始化参数的含义如下:

与

从头文件中可以看出,要想简单配置PWM很简单,只要改变PWM周期的值与脉冲值就好。
比如将改变一下两个语句:
htim10.Init.Period = 1000;
sConfigOC.Pulse = 200;
便将PWM配置为周期为1000个定时器周期,高电平持续时间为200个定时器时钟周期,占空比为200/1000=20%。
要想用按键控制PWM占空比,我们只需要修改一下PWM初始化函数,修改如下:

修改此函数之后,前面的函数声明也要改。改为:static void MX_TIM10_Init(int period,intpulse);
要想PWM工作,需要启动PWM。查看头文件stm32f4xx_hal_tim.h,可以看到如下函数:

这是PWM启动与停止的函数。
最后看看按键,只需要把按键配置为上拉模式就好。
在按键初始化中,将
GPIO_InitStruct.Pull= GPIO_NOPULL;
改为
GPIO_InitStruct.Pull= GPIO_PULLUP;
接下来便可以写主函数。
int main(void)
{
int i=100;
HAL_Init();
SystemClock_Config();
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
MX_GPIO_Init();
MX_TIM10_Init(1000,100);//PWM初始化
HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM
while (1)
{
if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))//如果按键按下
{
i=i+100;
if(i==1000) i=100;
HAL_TIM_PWM_Stop(&htim10, TIM_CHANNEL_1);//停止PWM
MX_TIM10_Init(1000,i);//PWM重新配置,周期为1000,高电平持续时间为i
HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM
while(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13));//等待按键释放
}
}
}
编译程序,下载程序,可以看到现象:

史海拾趣
|
[經典資源分享]各大公司電子類招聘題目精選 類比電路 1、基爾霍夫定理的內容是什麼?(仕蘭微電子) 2、平板電容公式(C=εS/4πkd)。(未知) 3、最基本的如三極管曲線特性。(未知) 4、描述回饋電路的概念,列舉他們的應用。(仕蘭微電子) ...… 查看全部问答> |
|
C-Source Code Generated AssemblyMemory Instruction// Enable only 2801 Peripheral Clocksunion PCLKCR0_REG shadowPCLKCR0;EALLOW; 3F82A7 EALLOWshadowPCLKCR0.bit.rsvd1 = 0; 3F82A8 MOV @AL,#0x47D8shadowPCLKCR0.bit.TBCLKSYNC = 0; 3F82AA ...… 查看全部问答> |
|
KernelIoControl找设备号的问题 if(!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,&g_Irq,sizeof(UINT32),&g_SysIntr,sizeof(UINT32),NULL)) { RETAILMSG(1,TEXT(\"ERROR:Failed to request sys ...… 查看全部问答> |
|
GPIO寄存器的读写方法。不过我看了还是很多疑惑,为什么在内存映射表里面这样定义 DCD 0x91600000, 0x56000000, 1 ; I/O Port register 而在s2410.h中又会这样#define IOP_BASE 0xB1600000 // 0x ...… 查看全部问答> |
|
本人最近开始学习windows驱动开发。发现太不好学了。 我在网上下了一个hello world程序,编译通过、生成.sys文件。 但不我知道怎么能看到结果呢。 请指教。… 查看全部问答> |
|
驱动设计四挑战 由于LED在原器件的物理特性差异,制作光源系统的观念则与传统设计大不相同,需要有更多方面的技术与专业辅助。 1.电源转换:LED原器件若非特殊制作方式,一般都是直流驱动 ...… 查看全部问答> |
|
锂电池广泛使用,连环保汽车使用的都是锂电池。现在的锂电池电充管理也成了一门学问。这里跟大家汇报一下我们解剖HC4054充电IC的情况。 为了延长锂电池的使用寿命。锂电池充电都遵守如下军规: 1、单节锂电池小于2.5V时,用小电流充电(俗称的涓 ...… 查看全部问答> |
|
Vishay发布用于电力电子产品的新系列3相圆柱形电容器 器件可处理高电流;电压等级从400VAC至1650VAC;提供各种高度和直径选项 宾夕法尼亚、MALVERN — 2012 年 7 月2 日 — 日前,Vishay Intertechnology, Inc.(NYSE 股市代号 ...… 查看全部问答> |




