20230531作业

pwm.h

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

pwm.c

 #include "pwm.h"                                                               
                                                                                
                                                                                
 //蜂鸣器初始化 PB6--->TIM4_CH1                                                 
 void hal_pwm_init()                                                            
 {                                                                              
 //RCC章节初始化                                                                
     //GPIOB组使能 RCC_MP_AHB4ENSETR[1]=1                                       
     RCC->MP_AHB4ENSETR |= (0x1 << 1);                                          
     //TIM4组使能 RCC_MP_APB1ENSETR[2]=1                                        
     RCC->MP_APB1ENSETR |= (0x1 << 2);                                          
                                                                                
 //GPIO章节初始化                                                               
     //设置GPIOB_MODER复用功能 GPIOB_MODER[13:12] = 01                          
     GPIOB->MODER &= (~(0x3 << 12));                                            
     GPIOB->MODER |= (0x1 << 13);                                               
     //设置GPIOB_AFRL对应的复用功能 GPIOB_AFRL[27:24] = 0010                    
     GPIOB->AFRL &= (~(0xf << 24));                                             
     GPIOB->AFRL |= (0x1 << 25);                                                
                                                                                
 //TIM4章节初始化  方波频率1000Hz 占空比70%                                     
     //TIM4_PSC[15:0] = 208   PSC[15:0]+1  设置分频                             
     TIM4->PSC = 208;                                                           
     //TIM4_ARR[15:0] = 1000  设置自动重载计数器                                
     TIM4->ARR = 1000;                                                          
                                                                                
                                                                                
     //TIM4_CCR1[31:0] = 300                                                    
     TIM4->CCR1 = 300;                                                          
                                                                                
                                                                                
     //TIM4_CCMR1[16][6:4] = 0110  设置pwm模式                                  
     TIM4->CCMR1 &= (~(0x1 << 16));                                             
     TIM4->CCMR1 &= (~(0x7 << 4));                                              
     TIM4->CCMR1 |= (0x6 << 4);                                                 
    //TIM4_CCMR1[3] = 1 设置比较寄存器预加载使能                            
    TIM4->CCMR1 |= (0x1 << 3);                                              
    //TIM4_CCMR1[1:0] = 00  配置通道1为输出模式                             
    TIM4->CCMR1 &= (~(0x3 << 0));                                           
                                                                            
    //TIM4_CCER[3] = 0 设置捕获、比较寄存器为输出模式                       
    TIM4->CCER &= (~(0x1 << 3));                                            
    //TIM4_CCER[1] = 0/1 设置捕获、比较寄存器其实状态为低/高电平            
    TIM4->CCER |= (0x1 << 1);                                               
    //TIM4_CCER[0] = 1 设置捕获、比较寄存器使能                             
    TIM4->CCER |= (0x1 << 0);                                               
                                                                            
    //TIM4_CR1[7] = 1  设置自动重载预加载使能                               
    TIM4->CR1 |= (0x1 << 7);                                                
    //TIM4_CR1[6:5] = 00  设置边沿对齐方式                                  
    TIM4->CR1 &= (~(0x3 << 5));                                             
    //TIM4_CR1[4] = 1  设置计数方式为递减计数方式                           
    TIM4->CR1 |= (0x1 << 4);                                                
    //TIM4_CR1[0] = 1  设置计数使能                                         
    TIM4->CR1 |= (0x1 << 0);                                                
}                                                                           
                                                                            
//风扇初始化 TIM1_CH1---->PE9                                               
void hal_fan_init()                                                         
{                                                                           
//RCC章节初始化                                                             
    //GPIOE组使能 RCC_MP_AHB4ENSETR[4]=1                                    
    RCC->MP_AHB4ENSETR |= (0x1 << 4);                                       
    //TIM1组使能 RCC_MP_APB2ENSETR[0]=1                                     
    RCC->MP_APB2ENSETR |= (0x1 << 0);                                       
                                                                            
//GPIO章节初始化                                                            
    //设置GPIOE_MODER复用功能 GPIOE_MODER[19:18] = 01                       
     GPIOE->MODER &= (~(0x3 << 18));                                           
     GPIOE->MODER |= (0x1 << 19);                                              
     //设置GPIOE_AFRH对应的复用功能 GPIOE_AFRH[7:4] = 0001                     
     GPIOE->AFRH &= (~(0xf << 4));                                             
     GPIOE->AFRH |= (0x1 << 4);                                                
                                                                               
 //TIM1章节初始化  方波频率1000Hz 占空比70%                                    
     //TIM1_PSC[15:0] = 208   PSC[15:0]+1  设置分频                            
     TIM1->PSC = 208;                                                          
     //TIM1_ARR[15:0] = 1000  设置自动重载计数器                               
     TIM1->ARR = 1000;                                                         
                                                                               
                                                                               
     //TIM1_CCR1[31:0] = 300                                                   
     TIM1->CCR1 = 300;                                                         
                                                                               
                                                                               
     //TIM1_CCMR1[16][5:3] = 0110  设置pwm模式                                 
     TIM1->CCMR1 &= (~(0x1 << 16));                                            
     TIM1->CCMR1 &= (~(0x7 <<4));                                              
     TIM1->CCMR1 |= (0x6 << 4);                                                
     //TIM1_CCMR1[3] = 1 设置比较寄存器预加载使能                              
     TIM1->CCMR1 |= (0x1 << 3);                                                
     //TIM1_CCMR1[1:0] = 00  配置通道1为输出模式                               
     TIM1->CCMR1 &= (~(0x3 << 0));                                             
                                                                               
     //TIM1_CCER[3] = 0 设置捕获、比较寄存器为输出模式                         
     TIM1->CCER &= (~(0x1 << 3));                                              
     //TIM1_CCER[1] = 0/1 设置捕获、比较寄存器其实状态为低/高电平              
     TIM1->CCER |= (0x1 << 1);                                                 
     //TIM1_CCER[0] = 1 设置捕获、比较寄存器使能                               
     TIM1->CCER |= (0x1 << 0);                                                 
     //TIM1_CR1[7] = 1  设置自动重载预加载使能                         
     TIM1->CR1 |= (0x1 << 7);                                          
     //TIM1_CR1[6:5] = 00  设置边沿对齐方式                            
     TIM1->CR1 &= (~(0x3 << 5));                                       
     //TIM1_CR1[4] = 1  设置计数方式为递减计数方式                     
     TIM1->CR1 |= (0x1 << 4);                                          
                                                                       
     TIM1->BDTR |= (0x1 << 15);                                        
     //TIM1_CR1[0] = 1  设置计数使能                                   
     TIM1->CR1 |= (0x1 << 0);                                          
 }                                                                     
                                                                       
                                                                       
                                                                       
 //马达初始化 TIM16_CH1---->PF6                                        
 void hal_monitor_init()                                               
 {                                                                     
 //RCC章节初始化                                                       
     //GPIOE组使能 RCC_MP_AHB4ENSETR[5]=1                              
     RCC->MP_AHB4ENSETR |= (0x1 << 5);                                 
     //TIM1组使能 RCC_MP_APB2ENSETR[3]=1                               
     RCC->MP_APB2ENSETR |= (0x1 << 3);                                 
                                                                       
 //GPIO章节初始化                                                      
     //设置GPIOE_MODER复用功能 GPIOF_MODER[13:12] = 01                 
     GPIOF->MODER &= (~(0x3 << 12));                                   
     GPIOF->MODER |= (0x1 << 13);                                      
     //设置GPIOE_AFRL对应的复用功能 GPIOF_AFRL[27:24] = 0001           
     GPIOF->AFRL &= (~(0xf << 24));                                    
     GPIOF->AFRL |= (0x1 << 24);                                       
                                                                       
 //TIM1章节初始化  方波频率1000Hz 占空比70%                            
     //TIM16_PSC[15:0] = 208   PSC[15:0]+1  设置分频                   
                                                                               
     TIM16->PSC = 208;                                                  
     //TIM16_ARR[15:0] = 1000  设置自动重载计数器                       
     TIM16->ARR = 1000;                                                 
                                                                        
                                                                        
     //TIM16_CCR1[15:0] = 300                                           
     TIM16->CCR1 = 300;                                                 
                                                                        
                                                                        
     //TIM16_CCMR1[16][5:3] = 0110  设置pwm模式                         
     TIM16->CCMR1 &= (~(0x1 << 16));                                    
     TIM16->CCMR1 &= (~(0x7 <<4));                                      
     TIM16->CCMR1 |= (0x6 << 4);                                        
     //TIM16_CCMR1[3] = 1 设置比较寄存器预加载使能                      
     TIM16->CCMR1 |= (0x1 << 3);                                        
     //TIM1_CCMR1[1:0] = 00  配置通道1为输出模式                        
     TIM16->CCMR1 &= (~(0x3 << 0));                                     
                                                                        
     //TIM16_CCER[3] = 0 设置捕获、比较寄存器为输出模式                 
     TIM16->CCER &= (~(0x1 << 3));                                      
     //TIM16_CCER[1] = 0/1 设置捕获、比较寄存器其实状态为低/高电平      
     TIM16->CCER |= (0x1 << 1);                                         
     //TIM16_CCER[0] = 1 设置捕获、比较寄存器使能                       
     TIM16->CCER |= (0x1 << 0);                                         
                                                                        
     //TIM16_CR1[7] = 1  设置自动重载预加载使能                         
     TIM16->CR1 |= (0x1 << 7);                                          
     //TIM1_CR1[6:5] = 00  设置边沿对齐方式                             
     //TIM1->CR1 &= (~(0x3 << 5));                                      
     //TIM1_CR1[4] = 1  设置计数方式为递减计数方式                      
     //TIM1->CR1 |= (0x1 << 4);                                         
                                                                        
                                            
     TIM16->BDTR |= (0x1 << 15);            
     //TIM16_CR1[0] = 1  设置计数使能       
     TIM16->CR1 |= (0x1 << 0);              
 }                                          
                                            
                                            
                                            
                                            
                                            

main.c

  1 #include "pwm.h"
  2 
  3 extern void printf(const char *fmt, ...);
  4 
  5 void delay_ms(int ms)
  6 {
  7     int i,j;
  8     for(i = 0; i < ms;i++)
  9         for (j = 0; j < 1800; j++);
 10 }
 11 
 12 int main()
 13 {
 14 //  hal_pwm_init();
 15     hal_fan_init();
 16     hal_monitor_init();
 17     while(1)
 18     {
 19     
 20     }
 21     return 0;
 22 }
 23 
 24 
 25 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值