1、作业要求

编写蜂鸣器/风扇/马达代码。

2、实现过程

1)pwm.h头文件

#ifndef __PWM_H__
#define __PWM_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"//蜂鸣器初始化
void beep_init();//风扇初始化
void fan_init();//马达初始化
void monitor_init();#endif

2)pwm.c源文件

#include "pwm.h"//蜂鸣器初始化
void beep_init()
{/***********RCC章节************/RCC->MP_AHB4ENSETR |= (0x1 << 1);  //使能GPIOB组控制器,PB6RCC->MP_APB1ENSETR |= (0x1 << 2);     //使能TIM4组控制器/***********GPIO章节************/GPIOB->MODER &= (~(0x3 << 12));GPIOB->MODER |= (0x1 << 13);      //设置PB6为复用功能模式GPIOB->AFRL &= (~(0xf << 24));      //设置PB6引脚复用功能模式TIM4_CH1GPIOB->AFRL |= (0x1 << 25);        //AFRL[27:24] = 0010 (AF2)/***********TIM4章节************/TIM4->PSC = 208;      //设置预分频寄存器,TIM4_PSC[15:0] = 208TIM4->ARR = 1000;        //设置重载计数器,TIM4_ARR[15:0] = 1000TIM4->CCR1 = 700;        //设置捕获/比较计数器,TIM4_CCR1[15:0] = 700TIM4->CCMR1 &= (~(0x1 << 16));  //设置输出模式为PWM模式TIM4->CCMR1 &= (~(0x7 << 4));TIM4->CCMR1 |= (0x3 << 5);TIM4->CCMR1 |= (0x1 << 3);       //设置输出比较寄存器使能TIM4->CCMR1 &= (~(0x3 << 0));    //设置通道为输出模式TIM4->CCER &= (~(0x1 << 3));   //配置通道1为输出极性模式TIM4->CCER &= (~(0x1 << 1));    //配置通道1起始电平状态TIM4->CCER |= (0x1 << 0);        //配置通道1输出使能TIM4->CR1 |= (0x1 << 7);       //自动重载预加载使能TIM4->CR1 &= (~(0x3 << 5));    //边沿对齐模式TIM4->CR1 |= (0x1 << 4);      //采取递减方式进行对齐TIM4->CR1 |= (0x1 << 0);      //计数器使能
}//风扇初始化
void fan_init()
{/***********RCC章节************/RCC->MP_AHB4ENSETR |= (0x1 << 4);  //使能GPIOE组控制器,PE9RCC->MP_APB2ENSETR |= (0x1 << 0);     //使能TIM组控制器/***********GPIO章节************/GPIOE->MODER &= (~(0x3 << 18));GPIOE->MODER |= (0x1 << 19);       //设置PE9为复用功能模式GPIOE->AFRH &= (~(0xf << 4));       //设置PE9引脚复用功能模式,TIM1_CH1GPIOE->AFRH |= (0x1 << 4);         //AFRH[7:4] = 0001 (AF1)/***********TIM4章节************/TIM1->PSC = 208;        //设置预分频寄存器,TIM4_PSC[15:0] = 208TIM1->ARR = 1000;        //设置重载计数器,TIM4_ARR[15:0] = 1000TIM1->CCR1 = 700;        //设置捕获/比较计数器,TIM4_CCR1[15:0] = 700TIM1->CCMR1 &= (~(0x1 << 16));  //设置输出模式为PWM模式TIM1->CCMR1 &= (~(0x7 << 4));TIM1->CCMR1 |= (0x3 << 5);TIM1->CCMR1 |= (0x1 << 3);       //设置输出比较寄存器使能TIM1->CCMR1 &= (~(0x3 << 0));    //设置通道为输出模式TIM1->CCER &= (~(0x1 << 3));   //配置通道1为输出极性模式TIM1->CCER &= (~(0x1 << 1));    //配置通道1起始电平状态TIM1->CCER |= (0x1 << 0);        //配置通道1输出使能TIM1->CR1 |= (0x1 << 7);       //自动重载预加载使能TIM1->CR1 &= (~(0x3 << 5));    //边沿对齐模式TIM1->CR1 |= (0x1 << 4);      //采取递减方式进行对齐TIM1->CR1 |= (0x1 << 0);      //计数器使能TIM1->BDTR |= (0x1 << 15);         //主控制器使能
}//马达初始化
void monitor_init()
{/***********RCC章节************/RCC->MP_AHB4ENSETR |= (0x1 << 5);  //使能GPIOF组控制器,PF6RCC->MP_APB2ENSETR |= (0x1 << 3);     //使能TIM16组控制器/***********GPIO章节************/GPIOF->MODER &= (~(0x3 << 12));GPIOF->MODER |= (0x1 << 13);         //设置PF6为复用功能模式GPIOF->AFRL &= (~(0xf << 24));      //设置PF6引脚复用功能模式,TIM16_CH1GPIOF->AFRL |= (0x1 << 24);       //AFRL[27:24] = 0001 (AF1)/***********TIM4章节************/TIM16->PSC = 208;         //设置预分频寄存器,TIM4_PSC[15:0] = 208TIM16->ARR = 1000;       //设置重载计数器,TIM4_ARR[15:0] = 1000TIM16->CCR1 = 700;       //设置捕获/比较计数器,TIM4_CCR1[15:0] = 700TIM16->CCMR1 &= (~(0x1 << 16));     //设置输出模式为PWM模式TIM16->CCMR1 &= (~(0x7 << 4));TIM16->CCMR1 |= (0x3 << 5);TIM16->CCMR1 |= (0x1 << 3);        //设置输出比较寄存器使能TIM16->CCMR1 &= (~(0x3 << 0));   //设置通道为输出模式TIM16->CCER &= (~(0x1 << 3));  //配置通道1为输出极性模式TIM16->CCER &= (~(0x1 << 1));   //配置通道1起始电平状态TIM16->CCER |= (0x1 << 0);       //配置通道1输出使能TIM16->CR1 |= (0x1 << 7);      //自动重载预加载使能TIM16->CR1 |= (0x1 << 0);      //计数器使能TIM16->BDTR |= (0x1 << 15);        //主控制器使能
}

3)main.c测试文件

#include "pwm.h"extern void printf(const char *fmt, ...);void delay_ms(int ms)
{int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);
}int main()
{//初始化beep_init();      //蜂鸣器fan_init();        //风扇monitor_init();     //马达while(1) {}return 0;}

PWM实验:蜂鸣器、风扇和马达相关推荐

  1. PWM实验(控制蜂鸣器,风扇,马达)

    cortex-A7核实现PWM对蜂鸣器,风扇,马达的控制 1.PWM概念 PWM为一种对模拟信号电平进行数字编码的方法,通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码 ...

  2. 基于STM32MP157A的蜂鸣器,马达,震动马达PWM实验

    PWM实验 PWM概念 代码实现 pwm.c pwm.h main.c PWM概念 1.PWM:脉冲宽度调制定时器 2.脉冲:方波信号,高低电平的变化产生方波信号 3.周期:高低电平变化所需要的时间, ...

  3. PWM方波驱动风扇,蜂鸣器,马达工作

    重点:会分析电路图,确定总线和引脚,通过这两个找到对应的地址设置相应位置上的值.库函数中已经封装好了相应的结构体指针对应的地址,可以直接根据名字访问结构体成员.使用非常方便 #include &quo ...

  4. STM32MP157 A7核蜂鸣器,风扇,马达

    pwm.c #include "pwm.h"//蜂鸣器初始化 TIM4_CH1 PB6 void hal_beep_init() {//rcc章节初始化RCC->MP_APB ...

  5. 10.2国庆作业(PWM实验)

    文章目录 作业内容 思路分析 1. 电路分析 2. RCC章节分析 3. GPIO章节分析 4. TIM4章节分析(以蜂鸣器为例) 代码实现 pwm.h pwm.c main.c 作业内容 完成PWM ...

  6. ARM接口实验-PWM实验

    一.PWM概念 1.PWM:脉冲宽度调制定时器 2.脉冲:方波信号,高低电平的变化产生方波信号 3.周期:高低电平变化所需要的时间,单位:ms 4.频率:周期和频率之间是倒数关系,1S钟可以产生的多少 ...

  7. 51单片机PWM调速风扇转速显示转速设置

    实践制作DIY- GC0029-PWM调速风扇 一.功能说明: 基于51单片机设计-PWM调速风扇 二.功能介绍: STC89C52单片机(AT89C52)+5V4线PWM风扇+LCD1602显示器+ ...

  8. 6、英飞凌-AURIX-TC3XX: PWM实验之使用 GTM -ATOM 实现

    目录 6.英飞凌-AURIX-TC3XX: PWM实验之使用 GTM -ATOM 实现 1.ATOM 简介 2.ATOM子模块的框架 3.ATOM 通道的五种操作模式: 4.ATOM通道结构 5.AR ...

  9. 5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现

    目录 5.英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现 1.GTM -TOM简介 2.TOM框图 3.TOM全局通道控制--TGC0, TGC1 4.实验简介 4.1.实 ...

最新文章

  1. 在javascript中判断类型
  2. Oracle 11g 建表 表名大小写问题
  3. Jenkins添加从节点相关配置
  4. postgresql测试题_PostgreSQL练习
  5. [深度学习] 权重初始化--Weight Initialization
  6. python odoo_odoo python 使用缓存
  7. JavaScript异步编程原理
  8. python工业互联网应用实战13—基于selenium的功能测试
  9. git push 出现 you are not allowed to upload merges 错误提示
  10. 一文详解自然语言处理任务之共指消解
  11. 操作系统:高响应比优先调度算法(HRRN)Java代码实现
  12. 《矩阵分析与应用》(第2版)———知识+Matlab2018a——2nd
  13. libreelec投屏_在LibreELEC上安装Entware
  14. 新浪UC 单文件精简版
  15. 2017年全国大学生电子设计竞赛综合测评题目解析——2022更新(方波生成,方波分频,三角波,加法器,滤波器,正弦波))
  16. 宏基(Acer)笔记本(5583)拆机清洗风扇
  17. 机器学习(上)线性回归、多项式回归、标准差、百分位数、数据分布、散点图
  18. 百度地图 - 绘制驾车路线图
  19. 惨烈!2018年这些企业“阵亡”了…
  20. [二分法]leetcode2187:完成旅途的最少时间(medium)

热门文章

  1. mplayer php,mplayer 用法大全 转
  2. 安卓版炉石修改服务器,炉石传说安卓/iOS开启流畅60帧的方法 60帧模式修改教程...
  3. 在演讲时巧用PPT的备注功能
  4. Python自动化办公--长图拼接,视频合并
  5. nginx 一个端口多域名服务方案
  6. 精益数据分析阅读笔记之商业模式
  7. Android 图片裁剪之三剑式(二)
  8. 由于找不到MSVCP120D.dll,无法继续执行代码。重新安装程序可能会解决此问题。
  9. 世纪前线网络质量测试工具 是什么_【案例分享】利用手持式测试工具对建筑控制系统快速排障的方法...
  10. 企业邮箱怎样注册申请?哪个企业邮箱好用又安全?