4.4 arm 蜂鸣器,风扇,马达实验

头文件
#ifndef __PWM_H__
#define __PWM_H__
 
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_tim.h"
 
//蜂鸣器初始化
void hal_beep_init();
 
//风扇初始化
void hal_fan_init();
 
//马达初始化
void hal_monitor_init();
 
 
#endif
源文件
#include "pwm.h"
 
//蜂鸣器初始化 PB6---->TIM4_CH1
void hal_beep_init()
{
    //RCC章节初始化
    RCC->MP_AHB4ENSETR |= (0x1<<1);      //GPIOB使能
    RCC->MP_APB1ENSETR |= (0x1<<2);      //TIM4使能
 
    //GPIO章节初始化
    GPIOB->MODER &= (~(0x3<<12));    //设置模式为复用功能
    GPIOB->MODER |= (0x1<<13);
    GPIOB->AFRL &= (~(0xf<<24));       //设置复用功能为TIM4
    GPIOB->AFRL |= (0x1<<25);
 
    //TIM4章节初始化
    TIM4->PSC = 208;      //写入分频数
    TIM4->ARR = 1000;     //写入重载计数
    TIM4->CCR1 = 300;     //写入捕获数
 
    TIM4->CR1 |= (0x1 <<7);           //自动重载计数器预使能
    TIM4->CR1 &= (~(0x3<<5));     //设置边沿对齐模式
    TIM4->CR1 |= (0x1 <<4);         //设置递减计数器
    TIM4->CR1 |= 0x1;                  //设置计数器使能
 
    TIM4->CCMR1 &= (~(0x1<<16));    //设置通道为PWM模式
    TIM4->CCMR1 |= (0x3<<5);
    TIM4->CCMR1 &= (~(0x1<<4));
 
    TIM4->CCMR1 |= (0x1<<3);       //输出捕获预加载使能
 
    TIM4->CCMR1 &= (~(0x3));       //设置通道输出模式
 
    TIM4->CCER &= (~(0x1<<3));      //设置通道1为输出模式
    TIM4->CCER |= (~(0x1<<1));         //设置起始状态高电平
    TIM4->CCER |= 0x1;                    //设置通道1输出使能
}
 
 
//风扇初始化
void hal_fan_init()
{
    //RCC章节初始化                                                                      
    RCC->MP_AHB4ENSETR |= (0x1<<4);   //GPIOE使能                                       
    RCC->MP_APB2ENSETR |= 0x1;            //TIME1使能                                       
                                                                                     
                                                                                     
    //GPIO章节初始化                                                                     
    GPIOE->MODER &= (~(0x3<<18));//pe9     //设置模式为复用功能                          
    GPIOE->MODER |= (0x1<<19);                                                                                                                                        
    GPIOE->AFRH &= (~(0xf<<4));//pe9          //设置复用功能为TIM1                             
    GPIOE->AFRH |= (0x1<<4);                                                          
                                                                                     
    //TIME4章节初始化   
    TIM1->PSC = 208;   //写入分频数                                                                                                                                                 
    TIM1->ARR = 1000;   //写入重载计数                                                             
    TIM1->CCR1 = 300;  //写入捕获数    
 
    TIM1->CR1 |= (0x1 <<7);       //自动重载计数器预加载使能                                                                                             
    TIM1->CR1 &= (~(0x3<<5));     //设置边沿对齐模式                
    TIM1->CR1 |= (0x1 <<4);       //设置递减计数器                                                                                                    
    TIM1->CR1 |= 0x1;             //设置计数器使能                   
                                                                                     
    TIM1->CCMR1 &= (~(0x1<<16));  //设置为PWM1模式     
    TIM1->CCMR1 |= (0x3<<5);                                                          
    TIM1->CCMR1 &= (~(0x1<<4));                                                        
                                                                                     
    TIM1->CCMR1 |= (0x1<<3);      //输出捕获预加载使能            
                                                                                 
    TIM1->CCMR1 &= (~(0x3<<0));   //设置通道输出模式          
                                                                                                                                                                          
    TIM1->CCER &= (~(0x1<<3));     //设置通道1为输出模式            
    TIM1->CCER |= (0x1<<1);          //设置通道1起始状态高电平        
    TIM1->CCER |= (0x1<<0);         //设置通道1输出使能                      
                                                                                                                                               
    TIM1->BDTR |= (0x1<<15);
}
 
//马达初始化
void hal_monitor_init()
{
    //RCC初始化                                                                          
    RCC->MP_AHB4ENSETR |= (0x1<<5);     //GPIOF使能                                           
    RCC->MP_APB2ENSETR |= (0x1<<3);     //TIME16使能                                          
                                                                                         
    //GPIO初始化                                                                         
                                                                                         
    GPIOF->MODER &= (~(0x3<<12));    //设置模式为复用功能                              
    GPIOF->MODER |= (0x2<<12);                                                            
                                                                                         
    GPIOF->AFRL &= (~(0xf<<24));      //设置复用功能为TIM16                                
    GPIOF->AFRL |= (0x1<<24);                                                             
                                                                                         
                                                                                         
    //TIME16初始化
    TIM16->PSC = 208;       //写入分频数                                                                                                                                     
    TIM16->ARR = 1000;    //写入重载计数                                                              
    TIM16->CCR1 = 300;     //写入捕获数   
 
    TIM16->CR1 |= (0x1 <<7);              //自动重载计数器预加载使能          
    TIM16->CR1 &= (~(0x3<<5));       //设置边沿对齐模式               
    TIM16->CR1 |= (0x1 <<4);          //设置递减计数器                                                                                   
    TIM16->CR1 |= (0x1 <<0);           //设置计数器使能                     
                                                                                         
                                                                                         
    TIM16->CCMR1 &= (~(0x1<<16));     //设置为PWM1模式       
    TIM16->CCMR1 |= (0x3<<5);                                                             
    TIM16->CCMR1 &= (~(0x1<<4));                                                           
                                                                                         
    TIM16->CCMR1 |= (0x1<<3);           //输出捕获预加载使能              
                                                                                         
                                                                                         
    TIM16->CCMR1 &= (~(0x3<<0));        //设置为输出模式            
                                                                                                                                                                                
    TIM16->CCER &= (~(0x1<<3));       //设置通道1输出模式              
    TIM16->CCER |= (0x1<<1);            //设置起始状态高电平          
    TIM16->CCER |= (0x1<<0);          //设置为通道1输出使能                                                                               
                                                                                                                                                                                  
    TIM16->BDTR |= (0x1<<15);
测试文件
#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()

{

    void hal_beep_init();

    void hal_fan_init();

    void hal_monitor_init();

    while(1)
    {}
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值