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

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

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

图1 PWM配置

图2 按键IO口配置

然后生成Keil工程。

用Keil打开。

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

PWM初始化代码如下:

/* TIM10 init function */
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)
{/* USER CODE BEGIN 1 */int i=100;/* USER CODE END 1 *//* MCU Configuration----------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* Configure the system clock */SystemClock_Config();/* System interrupt init*//* Sets the priority grouping field */HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);/* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM10_Init(1000,100);//PWM初始化/* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM/* USER CODE END 2 *//* USER CODE BEGIN 3 *//* Infinite loop */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);//停止PWMMX_TIM10_Init(1000,i);//PWM重新配置,周期为1000,高电平持续时间为iHAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWMwhile(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13));//等待按键释放}}/* USER CODE END 3 */}

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

每次按下按键,占空比会增加10%。

HJL

2015.1.26

STM32F411RE Nucleo笔记-按键控制PWM占空比相关推荐

  1. 按键控制输出占空比可调的PWM波

    这里写自定义目录标题 按键的误区 举个例子 代码如下 实验结果 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 SmartyPants 创建一个自定义列表 如何 ...

  2. ws2812 程序设计与应用(2)DMA 控制 PWM 占空比(双缓存降低内存消耗)

    本文开发环境: MCU型号:STM32F103C8T6 IDE环境: MDK 5.27 代码生成工具:STM32CubeMx 5.6.1 HAL库版本:STM32Cube_FW_F1_V1.8.0 本 ...

  3. 单片机控制灯光亮度c语言程序,STC89C52RC单片机按键控制PWM输出LED灯亮度C语言程序...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //以下是源程序,只需修改定义IO口就可以使用, #include < reg52.h > #include < intrins.h & ...

  4. STM32F072 Nucleo笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭

    STM32F072 Nucleo学习笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭 本文例子用到: 1.  STM32F072 Nucleo开发板 2.  STM32CubeMX软 ...

  5. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  6. 笔记:STM32——PWM波形生成以及控制电机

    简单了解一下PWM波形就是利用定时器TIM比较器生成,就是根据CNT计时,然后PWM模式的CCR设置一个位置在0~RCC的位置,当CNT计时到CCR持平的位置就值0或者置1. PWM波形 频率=1/T ...

  7. pwm调速流程图小车_51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  8. STM32—TIM3输出PWM信号驱动MG996R舵机(按键控制)

    文章目录 一.前言 二.MG996R舵机简介 三.通用定时器TIMx 四.TIM3输出PWM信号代码详解 上传代码 一.前言 利用STM32的TIM3的通道1输出PWM信号,驱动MG996R舵机,按键 ...

  9. ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED

    ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED 总体思路 Block Design界面配置IP核并导出硬件配置 在SDK中编写C代码 下载PS和PL的联合工程到开发板 总体思路 首先需 ...

最新文章

  1. SpringBoot线程池的创建、@Async配置步骤及注意事项
  2. 我可以在同一页面上使用多个版本的jQuery吗?
  3. Node.js:Web模块、文件系统
  4. PING检查网络是否畅通
  5. 运维真的被云革命掉了吗?
  6. Kerberos与Sniffer,矛与盾永远的对立
  7. Spring容器扩展机制
  8. 一步到位之INNODB
  9. mysql毫秒值转成日期_MySQL毫秒值和日期的指定格式的相互转换
  10. 【C语言】筛选法求素数
  11. aspen分离膜_双膜组件强化CO_2混合气分离的研究
  12. 也许你并不了解 java.lang.String | JDK 11 源码阅读分析(灌水)与优化实测
  13. Sony Ericsson W550c
  14. 美亚杯赛前小训练,分享一套小模拟练习,弘连软件使用学习,供大家赛前训练,题目非常简单,很适合大家练手(非常推荐!)(新手手荐!)题目入门非常合适,也是了解软件很好的办法!
  15. Android之使用HttpPost提交数据到服务器(Android手机客户端和后台服务器交互)
  16. Speedoffice(word)如何添加小方框和勾
  17. a卡gpuz,MSI Afterburner显卡不显示温度,启动OverdriveNTool提示atiadlxx.dll不存在的错误
  18. oracle11g 常用函数(Functions)详解
  19. 基于FFmpeg实现屏幕录制
  20. 深入研究simulink建模与仿真之输入端口模块(Inport)的几种不同的图标

热门文章

  1. css怎么两线合并,【2人回答】CAD中如何把两条线合并成一条线?-3D溜溜网
  2. 网络工程数据通信课程设计之--校园小型网络规划与设计
  3. 阿里达摩院数学竞赛新一轮考题曝光,李永乐老师曾给出第一题详细解答
  4. ksoftirqd内核线程-处理软中断
  5. 电脑键盘部分按键失灵_电脑键盘失灵怎么办 三步教你解决问题【图文】
  6. linux进程的查看和查找 ps命令解析
  7. python实现自动化登录测试
  8. -bash:/etc/profile: line 21: syntax error near unexpected token `$‘do\r‘‘
  9. 客户体验模型|客户体验分析的四个关键要素
  10. 使用汽车VIN码识别的好处有哪些