电路分析


由图可知
蜂鸣器:TIM4_CH1---->PB6
风扇:TIM1_CH1---->PE9
马达:TIM16_CH1---->PF6
可以用以下代码检查硬件是否正常
gpio toggle gpiob6
gpio toggle gpioe9
gpio toggle gpiof6

程序分析

1.分析RCC章节:相关控制器组使能 TIM4 TIM1 TIM16 gpiob gpioe gpiof
2.分析GPIO章节:MODER复用模式/复用功能(10)
AFRL和AFRH改为TIMx_CH!
4.分析TIM4章节:产生特定的方波
递减计数方式
比较/捕获寄存器

代码

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()
{                                         //PWM_蜂鸣器初始化-->TIM4-CH1  PB6    pwm_buzzer_init();                    //PWM_风扇初始化-->TIM1-CH1 PE9       pwm_fan_init();                       //PWM_马达初始化-->TIM16-CH1 PF6      pwm_motor_init();                     while(1)                              {                                     }                                     return 0;
}                                         

pwm.h

#ifndef __PWM_H__
#define __PWM_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_tim.h"         //PWM_蜂鸣器初始化-->TIM4-CH1  PB6
void pwm_buzzer_init();             //PWM_风扇初始化-->TIM1-CH1 PE9
void pwm_fan_init();                //PWM_马达初始化-->TIM16-CH1 PF6
void pwm_motor_init();              #endif                              

pwm.c

PWM_蜂鸣器初始化

#include "pwm.h"//PWM_蜂鸣器初始化-->TIM4-CH1  PB6
void pwm_buzzer_init()
{//RCC初始化RCC->MP_AHB4ENSETR |=(0x1<<1); //GPIOB使能RCC->MP_APB1ENSETR |=(0x1<<2); //TIME4使能//GPIO初始化                                                                     GPIOB->MODER &=(~(0x3<<12));//pb6  //设置模式为复用功能GPIOB->MODER |=(0x2<<12);GPIOB->AFRL &=~(0xf<<24);//pb6     //设置复用功能为TIM4GPIOB->AFRL |=(0x2<<24);//TIME4初始化TIM4->CR1 |=(0x1 <<7);  //TIM4_CR1[7] = 1 ------>自动重载计数器预加载使能TIM4->CR1 &=~(0x3<<5); //TIM4_CR1[6:5] = 00 ------>设置边沿对齐模式TIM4->CR1 |=(0x1 <<4); //TIM4_CR1[4] = 1 ------>设置递减计数器TIM4->CR1 |=(0x1 <<0); //TIM4_CR1[0] = 1 ------>设置计数器使能TIM4->CCMR1 &= ~(0x1<<16); //TIM4_CCMR1[16][6:4] = 0110------>设置为PWM1模式TIM4->CCMR1 |=(0x3<<5);TIM4->CCMR1 &= ~(0x1<<4);TIM4->CCMR1 |=(0x1<<3); //TIM4_CCMR1[3] = 1 ------>输出捕获预加载使能TIM4->CCMR1 &=( ~(0x3<<0));//TIM4_CCMR1[1:0] =00 ------>设置为输出模式TIM4->CCER &=(~(0x1<<3));   //TIM4_CCER1[3] = 1 ------>设置为输出模式TIM4->CCER |=(0x1<<1);      //TIM4_CCER1[1] = 0 ------>设置起始状态高电平TIM4->CCER |=(0x1<<0);      //TIM4_CCER1[0] = 1 ------>设置为输出使能TIM4->PSC &=(~(0xffff));   //写入分频数TIM4->PSC |=(0xd1);TIM4->ARR &=(~(0xffff<<0)); //写入重载计数TIM4->ARR |=(0xEA60);TIM4->CCR1 &=(~(0xffffffff));  //写入捕获数TIM4->CCR1 |=(0x7530);}

PWM_风扇初始化

//PWM_风扇初始化-->TIM1-CH1 PE9
void pwm_fan_init()
{                                                                                    //RCC初始化                                                                      RCC->MP_AHB4ENSETR |=(0x1<<4); //GPIOE使能                                       RCC->MP_APB2ENSETR |=(0x1<<0); //TIME1使能                                       //GPIO初始化                                                                     GPIOE->MODER &=(~(0x3<<18));//pe9  //设置模式为复用功能                          GPIOE->MODER |=(0x2<<18);                                                        GPIOE->AFRH &=~(0xf<<4);//pe9   //设置复用功能为TIM1                             GPIOE->AFRH |=(0x1<<4);                                                          //TIME1初始化                                                                    TIM1->CR1 |=(0x1 <<7);  //TIM1_CR1[7] = 1 ------>自动重载计数器预加载使能        TIM1->CR1 &=~(0x3<<5); //TIM1_CR1[6:5] = 00 ------>设置边沿对齐模式             TIM1->CR1 |=(0x1 <<4); //TIM1_CR1[4] = 1 ------>设置递减计数器                   TIM1->CR1 |=(0x1 <<0); //TIM1_CR1[0] = 1 ------>设置计数器使能                   TIM1->CCMR1 &= ~(0x1<<16); //TIM1_CCMR1[16][6:4] = 0110------>设置为PWM1模式     TIM1->CCMR1 |=(0x3<<5);                                                          TIM1->CCMR1 &= ~(0x1<<4);                                                        TIM1->CCMR1 |=(0x1<<3); //TIM1_CCMR1[3] = 1 ------>输出捕获预加载使能            TIM1->CCMR1 &=( ~(0x3<<0));//TIM1_CCMR1[1:0] =00 ------>设置为输出模式          TIM1->CCER &=(~(0x1<<3));   //TIM1_CCER1[3] = 1 ------>设置为输出模式            TIM1->CCER |=(0x1<<1);      //TIM1_CCER1[1] = 0 ------>设置起始状态高电平        TIM1->CCER |=(0x1<<0);      //TIM1_CCER1[0] = 1 ------>设置为输出使能            TIM1->PSC &=(~(0xffff));   //写入分频数                                          TIM1->PSC |=(0xd1);                                                              TIM1->ARR &=(~(0xffff<<0)); //写入重载计数                                       TIM1->ARR |=(0x3eb);                                                             TIM1->CCR1 &=(~(0xffff));  //写入捕获数                                          TIM1->CCR1 |=(0x64);                                                             TIM1->BDTR |=(0x1<<15);                                                          }                                                                                    

PWM_马达初始化

//PWM_马达初始化-->TIM16-CH1 PF6
void pwm_motor_init()
{                                                                                        //RCC初始化                                                                          RCC->MP_AHB4ENSETR |=(0x1<<5); //GPIOF使能                                           RCC->MP_APB2ENSETR |=(0x1<<3); //TIME16使能                                          //GPIO初始化                                                                         GPIOF->MODER &=(~(0x3<<12));//pf6  //设置模式为复用功能                              GPIOF->MODER |=(0x2<<12);                                                            GPIOF->AFRL &=~(0xf<<24);//pf6  //设置复用功能为TIM16                                GPIOF->AFRL |=(0x1<<24);                                                             //TIME16初始化                                                                       TIM16->CR1 |=(0x1 <<7);  //TIM16_CR1[7] = 1 ------>自动重载计数器预加载使能          //  TIM16->CR1 &=~(0x3<<5); //TIM16_CR1[6:5] = 00 ------>设置边沿对齐模式               //  TIM16->CR1 |=(0x1 <<4); //TIM16_CR1[4] = 1 ------>设置递减计数器                     TIM16->CR1 |=(0x1 <<0); //TIM16_CR1[0] = 1 ------>设置计数器使能                     TIM16->CCMR1 &= ~(0x1<<16); //TIM16_CCMR1[16][6:4] = 0110------>设置为PWM1模式       TIM16->CCMR1 |=(0x3<<5);                                                             TIM16->CCMR1 &= ~(0x1<<4);                                                           TIM16->CCMR1 |=(0x1<<3); //TIM16_CCMR1[3] = 1 ------>输出捕获预加载使能              TIM16->CCMR1 &=( ~(0x3<<0));//TIM16_CCMR1[1:0] =00 ------>设置为输出模式            TIM16->CCER &=(~(0x1<<3));   //TIM16_CCER1[3] = 1 ------>设置为输出模式              TIM16->CCER |=(0x1<<1);      //TIM16_CCER1[1] = 0 ------>设置起始状态高电平          TIM16->CCER |=(0x1<<0);      //TIM16_CCER1[0] = 1 ------>设置为输出使能              TIM16->PSC &=(~(0xffff));   //写入分频数                                             TIM16->PSC |=(0xd1);                                                                 TIM16->ARR &=(~(0xffff<<0)); //写入重载计数                                          TIM16->ARR |=(0x3eb);                                                                TIM16->CCR1 &=(~(0xffffffff));  //写入捕获数                                         TIM16->CCR1 |=(0x64);                                                                TIM16->BDTR |=(0x1<<15);                                                             }                                                                                        

stm32 马达,风扇,蜂鸣器相关推荐

  1. stm32+超声波测距+蜂鸣器报警或JQ8900模块语音报警

    注:文末有完整工程链接(包含引脚连接.代码注释和使用说明),已实测通过,下载打开即用. 文章目录 前言 一.超声波测距 二.短距报警模块 1.使用无源蜂鸣器进行报警 2.使用JQ8900语音模块报警 ...

  2. STM32学习记录——蜂鸣器

    一.准备材料 1.参考资料 <STM32F103xCDE_DS_CH_V5.pdf> <STM32中文参考手册_V10.pdf> 2.器件准备 STM32 蜂鸣器 这里是一个接 ...

  3. 基于stm32智能风扇_一款基于STM32的智能灭火机器人设计

    要:设计了一种能顺利完成在模拟房间内自动灭火任务的智能灭火机器人.方案以STM32F103嵌入式芯片为控制核心,采用传感器组采集环境信号,控制机器人行动.该智能机器人能完成自动循迹.自动避障.自动寻找 ...

  4. stm32无源蜂鸣器定时器_使用STM32控制无源蜂鸣器发声播放音乐

    [实例简介] 利用GPIO控制无源蜂鸣器发声,播放音乐.使用SysTick延时,使用位带操作寻址IO口引脚. [实例截图] [核心代码] pMusic ├── CMSIS │   ├── core_c ...

  5. 基于stm32智能风扇_意法半导体和Fieldscale为基于STM32的智能设备带来简单直观的触控体验...

    "意法半导体与ST授权合作伙伴.仿真软件提供商Fieldscale合作,简化基于STM32微控制器(MCU)的智能设备的触控用户界面开发过程. " • Fieldscale SEN ...

  6. STM32实战-无源蜂鸣器

    前言: 主要通过无源蜂鸣器实现功能有: 1.上电后,无源蜂鸣器发出警报声: 2.通过触摸按键1打开或关闭蜂鸣器; 目录 1.硬件电路部分 2.技术讲解 2.1通用定时器(TIMx) 2.2主要特性 2 ...

  7. STM32驱动压电式蜂鸣器发出和弦音原理图加程序

    一.原理图 一.驱动代码 #include "beep.h"void beep_init(void) {GPIO_InitTypeDef GPIO_InitStructure;RC ...

  8. 毕业设计 stm32智能温控风扇系统 - 单片机 嵌入式

    文章目录 1 简介 2 绪论 2.1 课题背景 3 系统设计 3.1 系统架构 3.2 硬件部分 3.2.1 DS18B20 简介 3.2.2 LCD1602 液晶屏简介 3.3 软件部分 3.3.1 ...

  9. ameya30代理品牌尼得科电风扇专用无刷直流马达和扇叶模组

    高能效.小型轻便.兼具风量微调功能的电风扇在当今的家电产品领域中,越来越多的电器厂商开始从"节能省电"这一角度出发,重新对产品的功能进行改良.电风扇就是其中之一.与以往搭载交流马达 ...

最新文章

  1. C++编程进阶8(最好不要实现类型转换运算符、单形参的构造函数与类型转换、临时对象与RVO)
  2. Visual Studio Code
  3. 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序
  4. 缓冲区溢出攻击初学者手册(更新版)
  5. 7-1 输入学生姓名,输出问候信息。
  6. 2019白金之星 第一次初赛 第一题 Polynomial
  7. 字词拼音查询易语言代码
  8. 常用 MQTT 客户端库简介
  9. [CGAL] CGAL各模块介绍
  10. 使用ARCGIS多重缓冲区分析工具建立颜色渐变行政边界
  11. matlab均值量化函数_Matlab量化函数quantiz解析
  12. 《计算机文件管理》教学设计,《文件和文件夹的操作》教学设计
  13. 商务个人邮箱,vip邮箱哪个最好用?外贸邮箱哪个是安全邮箱?
  14. mac安装texstudio+mactex(texlive)2022+中文字体
  15. python斐波那契数列前20项_Python初学者笔记:打印出斐波那契数列的前10项
  16. 费率与利率的差别_费率是什么(利率和费率有啥区别?)
  17. 【离散数学】谓词逻辑
  18. 字符串常量池,看这篇就够了(一)
  19. Internet Download Manager6.41加速器最快的电脑工具下载器
  20. 程序视角下的“连跳”操作(FPS游戏)

热门文章

  1. P0级重大事故:超卖了100瓶飞天茅台,整个项目组慌了
  2. EC-R3566PC四核64位嵌入式主机
  3. 使用Filezilla和SFTP连接到Amazon EC2文件目录
  4. Linux必须学内容
  5. Java(TM)中TM的意思
  6. 典型相关分析(CCA)相关资料
  7. Linux IO接口 监控 (iostat)
  8. 面试题 03.06. 动物收容所(简单)
  9. vc 运行不了pdb文件什么鬼_PDB文件:每个开发人员都必须知道的(转)
  10. 大数据引领县域农业步入新时代