历史上的今天
返回首页

历史上的今天

今天是:2024年10月05日(星期六)

正在发生

2018年10月05日 | STM32F411RE Nucleo笔记-按键控制PWM占空比

2018-10-05 来源:eefocus

此次用到STM32F411RENucleo开发板,用到Keil MDK5.12和STM32CubeMx软件。

首先用STM32CubeMx软件配置定时器PWM模式与按键输入IO口。

STM32F411RE <wbr>Nucleo笔记-按键控制PWM占空比

图1 PWM配置

STM32F411RE <wbr>Nucleo笔记-按键控制PWM占空比

图2 按键IO口配置

然后生成Keil工程。

用Keil打开。

         首先修改有关PWM方面的代码。


PWM初始化代码如下:


  1. void MX_TIM10_Init(void)

  2. {

  3.   TIM_OC_InitTypeDef sConfigOC;


  4.   htim10.Instance = TIM10;

  5.   htim10.Init.Prescaler = 0;

  6.   htim10.Init.CounterMode = TIM_COUNTERMODE_UP;

  7.   htim10.Init.Period = 0;

  8.   htim10.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  9.   HAL_TIM_Base_Init(&htim10);


  10.   HAL_TIM_PWM_Init(&htim10);


  11.   sConfigOC.OCMode = TIM_OCMODE_PWM1;

  12.   sConfigOC.Pulse = 0;

  13.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  14.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

  15.   HAL_TIM_PWM_ConfigChannel(&htim10, &sConfigOC, TIM_CHANNEL_1);

  16. }

查看头文件stm32f4xx_hal_tim.h,可以知道定时器初始化参数的含义如下:

STM32F411RE <wbr>Nucleo笔记-按键控制PWM占空比

STM32F411RE <wbr>Nucleo笔记-按键控制PWM占空比

从头文件中可以看出,要想简单配置PWM很简单,只要改变PWM周期的值与脉冲值就好。

比如将改变一下两个语句:

htim10.Init.Period = 1000;

sConfigOC.Pulse = 200;

便将PWM配置为周期为1000个定时器周期,高电平持续时间为200个定时器时钟周期,占空比为200/1000=20%。


要想用按键控制PWM占空比,我们只需要修改一下PWM初始化函数,修改如下:

STM32F411RE <wbr>Nucleo笔记-按键控制PWM占空比


修改此函数之后,前面的函数声明也要改。改为:static void MX_TIM10_Init(int period,intpulse);


要想PWM工作,需要启动PWM。查看头文件stm32f4xx_hal_tim.h,可以看到如下函数:

STM32F411RE <wbr>Nucleo笔记-按键控制PWM占空比


这是PWM启动与停止的函数。

最后看看按键,只需要把按键配置为上拉模式就好。

在按键初始化中,将

GPIO_InitStruct.Pull= GPIO_NOPULL;

改为

GPIO_InitStruct.Pull= GPIO_PULLUP;


接下来便可以写主函数。

  1. int main(void)

  2. {


  3.   

  4.         int i=100;

  5.   

  6.   

  7.   HAL_Init();


  8.   

  9.   SystemClock_Config();


  10.   

  11.   

  12.   HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);

  13.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);


  14.   

  15.   MX_GPIO_Init();

  16.   MX_TIM10_Init(1000,100);//PWM初始化


  17.   

  18.         HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM

  19.   


  20.   

  21.   

  22.   while (1)

  23.   {

  24.                 if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))//如果按键按下

  25.                 {

  26.                         i=i+100;

  27.                         if(i==1000) i=100;

  28.                         HAL_TIM_PWM_Stop(&htim10, TIM_CHANNEL_1);//停止PWM

  29.                         MX_TIM10_Init(1000,i);//PWM重新配置,周期为1000,高电平持续时间为i

  30.                         HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM

  31.                         while(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13));//等待按键释放

  32.                 }

  33.   }

  34.   


  35. }

编译程序,下载程序,可以看到现象:

STM32F411RE <wbr>Nucleo笔记-按键控制PWM占空比


推荐阅读

史海拾趣

DRS Technologies公司的发展小趣事

DRS Technologies公司成立于1968年,由Leonard Newman和David Gross两位工程师共同创立。当时,他们正在Loral Corporation研究反潜战的信号处理技术。然而,当Loral决定转向其他技术方向时,Newman和Gross决定继续他们的研究,并创立了DRS。他们的努力最终导致了AN/SQR-17无源潜艇探测系统的开发,这一系统至今仍在广泛使用。

Engelking Elektronik GmbH公司的发展小趣事

随着国内市场的饱和,Engelking Elektronik开始寻求海外市场的发展。公司制定了详细的国际化战略,包括参加国际电子展会、拓展海外销售渠道以及建立海外生产基地等。通过不断努力,Engelking Elektronik成功进入了欧洲、北美和亚洲等多个国家和地区的市场。同时,公司还积极适应不同地区的文化和市场需求,提供定制化的产品和服务。

中微股份(Cmsemicon)公司的发展小趣事

作为一家以技术创新为核心竞争力的企业,中微股份(Cmsemicon)始终坚持以市场需求为导向,持续推动技术创新和产品升级。近年来,公司在刻蚀设备领域取得了一系列重要突破,包括成功研制出针对先进逻辑和存储器件制造中关键刻蚀工艺的高端产品等。这些技术成果不仅提升了公司的核心竞争力,也为行业的发展做出了积极贡献。

Cables To Go公司的发展小趣事

随着电子技术的快速发展,线缆行业也在不断革新。Cables To Go公司紧跟技术潮流,不断引进新技术、新工艺和新材料,推动产品升级换代。公司还与多所高校和科研机构建立了合作关系,共同研发新型线缆产品和技术。这些技术革新不仅提升了产品的性能和品质,还为公司的可持续发展注入了新的动力。


请注意,以上故事都是基于假设和虚构的,不代表Cables To Go公司的实际发展情况。如需了解该公司的真实发展故事,建议查阅相关新闻报道或公司官方资料。

Conflux公司的发展小趣事

作为一家具有社会责任感的企业,Conflux始终关注社会公益事业。公司积极参与扶贫、教育等公益活动,为社会做出积极贡献。同时,Conflux还注重环保和可持续发展,通过采用环保材料和节能技术,降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也赢得了社会各界的广泛赞誉。

以上五个故事是虚构的,但反映了一个科技公司可能经历的发展阶段和策略选择。在现实中,一个公司的成长和发展往往涉及更多复杂的因素和决策过程。希望这些故事能够为您提供一些启发和参考。

First Switchtech公司的发展小趣事

在追求商业成功的同时,First Switchtech公司(或类似公司)也始终关注可持续发展和社会责任。公司致力于环保产品的研发和生产,推出了多款符合国际环保标准的电子开关产品。同时,公司还积极参与公益事业,通过捐赠资金、技术支持等方式帮助贫困地区改善教育条件、提升医疗水平等。这些举措不仅提升了公司的社会形象,也促进了公司与社会的和谐共生。

需要注意的是,以上故事是基于电子行业普遍趋势和可能发展路径的构想,并非直接针对First Switchtech公司的具体事实。如需了解该公司的真实发展情况,建议直接访问其官方网站或查阅相关新闻报道。

问答坊 | AI 解惑

[經典資源分享]各大公司電子類招聘題目精選

[經典資源分享]各大公司電子類招聘題目精選 類比電路 1、基爾霍夫定理的內容是什麼?(仕蘭微電子) 2、平板電容公式(C=εS/4πkd)。(未知) 3、最基本的如三極管曲線特性。(未知) 4、描述回饋電路的概念,列舉他們的應用。(仕蘭微電子) ...…

查看全部问答>

为什么这用了shadow register ?

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 ...…

查看全部问答>

内容可寻址存储器

谁用过CAM芯片,最好是摩托罗拉的mcm69c433,讲下使用方法,谢谢!…

查看全部问答>

KernelIoControl找设备号的问题

KernelIoControl找设备号的问题    if(!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,&g_Irq,sizeof(UINT32),&g_SysIntr,sizeof(UINT32),NULL))     {       RETAILMSG(1,TEXT(\"ERROR:Failed to request sys ...…

查看全部问答>

WinCE 内存映射的疑惑

GPIO寄存器的读写方法。不过我看了还是很多疑惑,为什么在内存映射表里面这样定义 DCD 0x91600000, 0x56000000,  1  ; I/O Port register 而在s2410.h中又会这样#define IOP_BASE      0xB1600000 // 0x ...…

查看全部问答>

HELLO WORLD

本人最近开始学习windows驱动开发。发现太不好学了。 我在网上下了一个hello world程序,编译通过、生成.sys文件。 但不我知道怎么能看到结果呢。 请指教。…

查看全部问答>

LED生活照明驱动设计四挑战

 驱动设计四挑战     由于LED在原器件的物理特性差异,制作光源系统的观念则与传统设计大不相同,需要有更多方面的技术与专业辅助。     1.电源转换:LED原器件若非特殊制作方式,一般都是直流驱动 ...…

查看全部问答>

锂电池充电管理--解剖HC4054

锂电池广泛使用,连环保汽车使用的都是锂电池。现在的锂电池电充管理也成了一门学问。这里跟大家汇报一下我们解剖HC4054充电IC的情况。 为了延长锂电池的使用寿命。锂电池充电都遵守如下军规: 1、单节锂电池小于2.5V时,用小电流充电(俗称的涓 ...…

查看全部问答>

怎么用命令行打开office文档?

就像vim evince  gedit 这种命令…

查看全部问答>

Vishay发布用于电力电子产品的新系列3相圆柱形电容器

Vishay发布用于电力电子产品的新系列3相圆柱形电容器   器件可处理高电流;电压等级从400VAC至1650VAC;提供各种高度和直径选项   宾夕法尼亚、MALVERN — 2012 年 7 月2 日 — 日前,Vishay Intertechnology, Inc.(NYSE 股市代号 ...…

查看全部问答>