你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
hjl240 发布时间:2015-2-4 10:08
本帖最后由 hjl240 于 2015-2-4 10:09 编辑

此次用到STM32F411RENucleo开发板,用到Keil MDK5.12和STM32CubeMx软件。
首先用STM32CubeMx软件配置定时器PWM模式与按键输入IO口。
1.png
图1 PWM配置
2.png
图2 按键IO口配置
然后生成Keil工程。
用Keil打开。
         首先修改有关PWM方面的代码。

PWM初始化代码如下:
  1. /* TIM10 init function */
  2. void MX_TIM10_Init(void)
  3. {
  4.   TIM_OC_InitTypeDef sConfigOC;

  5.   htim10.Instance = TIM10;
  6.   htim10.Init.Prescaler = 0;
  7.   htim10.Init.CounterMode = TIM_COUNTERMODE_UP;
  8.   htim10.Init.Period = 0;
  9.   htim10.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  10.   HAL_TIM_Base_Init(&htim10);

  11.   HAL_TIM_PWM_Init(&htim10);

  12.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  13.   sConfigOC.Pulse = 0;
  14.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  15.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  16.   HAL_TIM_PWM_ConfigChannel(&htim10, &sConfigOC, TIM_CHANNEL_1);
  17. }
复制代码
查看头文件stm32f4xx_hal_tim.h,可以知道定时器初始化参数的含义如下:
3.png
4.png
从头文件中可以看出,要想简单配置PWM很简单,只要改变PWM周期的值与脉冲值就好。
比如将改变一下两个语句:
htim10.Init.Period = 1000;
sConfigOC.Pulse = 200;
便将PWM配置为周期为1000个定时器周期,高电平持续时间为200个定时器时钟周期,占空比为200/1000=20%

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

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

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

这是PWM启动与停止的函数。
最后看看按键,只需要把按键配置为上拉模式就好。
在按键初始化中,将
GPIO_InitStruct.Pull= GPIO_NOPULL;
改为
GPIO_InitStruct.Pull= GPIO_PULLUP;

接下来便可以写主函数。
  1. int main(void)
  2. {

  3.   /* USER CODE BEGIN 1 */
  4.         int i=100;
  5.   /* USER CODE END 1 */

  6.   /* MCU Configuration----------------------------------------------------------*/

  7.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  8.   HAL_Init();

  9.   /* Configure the system clock */
  10.   SystemClock_Config();

  11.   /* System interrupt init*/
  12.   /* Sets the priority grouping field */
  13.   HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
  14.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

  15.   /* Initialize all configured peripherals */
  16.   MX_GPIO_Init();
  17.   MX_TIM10_Init(1000,100);//PWM初始化

  18.   /* USER CODE BEGIN 2 */
  19.         HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM
  20.   /* USER CODE END 2 */

  21.   /* USER CODE BEGIN 3 */
  22.   /* Infinite loop */
  23.   while (1)
  24.   {
  25.                 if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))//如果按键按下
  26.                 {
  27.                         i=i+100;
  28.                         if(i==1000) i=100;
  29.                         HAL_TIM_PWM_Stop(&htim10, TIM_CHANNEL_1);//停止PWM
  30.                         MX_TIM10_Init(1000,i);//PWM重新配置,周期为1000,高电平持续时间为i
  31.                         HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);//启动PWM
  32.                         while(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13));//等待按键释放
  33.                 }
  34.   }
  35.   /* USER CODE END 3 */

  36. }
复制代码
编译程序,下载程序,可以看到现象:
7.jpg


参考代码:
PWMChangeTest.zip (4.25 MB, 下载次数: 2463)
收藏 1 评论20 发布时间:2015-2-4 10:08

举报

20个回答
大秦正声 回答时间:2015-2-4 10:49:50
谢谢分享!
tcmax 回答时间:2015-2-4 14:29:19
请问你的keil里有那个411re的选项吗 我的是最新版的怎么没有啊
hjl240 回答时间:2015-2-4 19:10:11
tcmax 发表于 2015-2-4 14:29
请问你的keil里有那个411re的选项吗 我的是最新版的怎么没有啊

有的,,可以更新一下软件包

411.png
tcmax 回答时间:2015-2-5 00:43:04
hjl240 发表于 2015-2-4 19:10
有的,,可以更新一下软件包

我已经弄好了 可是固件库怎么加载啊?我百度了下说keil自带的固件库,可是找半天411的只有这些,请问你是怎么添加固件库的?难道是手动复制到文件夹里?
QQ图片20150205004211.jpg
hjl240 回答时间:2015-2-5 08:07:08
tcmax 发表于 2015-2-5 00:43
我已经弄好了 可是固件库怎么加载啊?我百度了下说keil自带的固件库,可是找半天411的只有这些,请问你是 ...

我是用STM32CubeMX软件直接生产的Keil工程,简单又方便,不用自己添加其他文件,,,,你可以试试用STM32CubeMX软件
拼命三郎V5 回答时间:2015-2-5 08:33:50
ssss.jpg
Ljmp 回答时间:2015-2-6 16:04:49
恩,刚用CUBX 还是有点不习惯哦
hjl240 回答时间:2015-2-8 08:51:45
Ljmp 发表于 2015-2-6 16:04
恩,刚用CUBX 还是有点不习惯哦

多用几次就习惯了
chuanc 回答时间:2015-6-9 09:17:57
这里所说的定时器周期,这个周期时间是多少呢?这个怎么确定呢?
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版