0706_ARM8

练习1:

PWM控制蜂鸣器,风扇,震动马达
pwm.h

#ifndef __UART4_H__
#define  __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_tim.h"

//蜂鸣器 PB6 TIME4_CH1 初始化
void hal_beep_init();

//风扇
void hal_fan_init();

//马达
void hal_monitor_init();

#endif

pwm.c

#include "pwm.h"

//蜂鸣器 PB6 TIM4_CH1
void hal_beep_init(){

    //rcc章节初始化
    //1.使能gpiob组控制器
    RCC->MP_AHB4ENSETR |= (0x1<<1);
    //2.使能tim4组控制器
    RCC->MP_APB1ENSETR |= (0x1<<2);

    //gpiob组控制器初始化
    //1.设置复用功能模式
    GPIOB->MODER &= (~(0x3<<12));
    GPIOB->MODER |= (0x2<<12);
    //2.设置复用功能为tim4_ch1
    GPIOB->AFRL &= (~(0xf<<24));
    GPIOB->AFRL |= (0x2<<24);

    //tim4章节初始化
    //产生方波 频率1000hz
    //系统提供时钟源位209mhz
    //1.设置预分频器
    TIM4->PSC = 208; //因为时钟频率=fck_psc/(PSC[15:0]+1),所以这里传输208
    //2.设置自动重载值
    TIM4->ARR = 1000; //1000
    //3.设置比较寄存器,控制占空比
    TIM4->CCR1 = 300;  //300
    //4.设置输出比较模式
    TIM4->CCMR1 &= (~(0x7<<4));
    TIM4->CCMR1 &= (~(0x1<<16));
    TIM4->CCMR1 |= (0x6<<4);
    //5.输出比较预加载使能
    TIM4->CCMR1 |= (0x1<<3);
    //6.设置通道1配置为输出
    TIM4->CCMR1 &= (~(0x3<<0));
    //8.设置起始时低电平
    TIM4->CCER |= (0x1<<1);
    //9.使能捕获
    TIM4->CCER |= (0x1<<0); 
    //10.设置自动重载预加载使能
    TIM4->CR1 |= (0x1<<7);
    //11.设置边沿对齐方式
    TIM4->CR1 &= (~(0x3<<5));
    //12.设置递减计数
    TIM4->CR1 |= (0x1<<4);
    //13.设置计数器使能
    TIM4->CR1 |= (0x1<<0);

}
//风扇
void hal_fan_init(){
    //rcc章节初始化
    //1.使能gpioe组控制器
    RCC->MP_AHB4ENSETR |= (0x1<<4);
    //2.使能tim1组控制器
    RCC->MP_APB2ENSETR |= (0x1<<0);

    //gpioe组控制器初始化
    //1.设置复用功能模式
    GPIOE->MODER &= (~(0x3<<18));
    GPIOE->MODER |= (0x2<<18);
    //2.设置复用功能为tim1_ch1
    GPIOE->AFRH &= (~(0xf<<4));
    GPIOE->AFRH |= (0x1<<4);

    //tim1章节初始化
    //产生方波 频率1000hz
    //系统提供时钟源位209mhz
    //1.设置预分频器
    TIM1->PSC = 208; //因为时钟频率=fck_psc/(PSC[15:0]+1),所以这里传输208
    //2.设置自动重载值
    TIM1->ARR = 1000; //1000
    //3.设置比较寄存器,控制占空比
    TIM1->CCR1 = 500;  //500
    //4.设置输出比较模式
    TIM1->CCMR1 &= (~(0x7<<4));
    TIM1->CCMR1 &= (~(0x1<<16));
    TIM1->CCMR1 |= (0x6<<4);
    //5.输出比较预加载使能
    TIM1->CCMR1 |= (0x1<<3);
    //6.设置通道1配置为输出
    TIM1->CCMR1 &= (~(0x3<<0));
    //14.设置主输出使能
    TIM1->BDTR |= (0x1<<15);

    //8.设置起始时低电平
    TIM1->CCER |= (0x1 << 3);
    TIM1->CCER |= (0x1<<1);
    //9.使能捕获
    TIM1->CCER |= (0x1<<0); 
    //10.设置自动重载预加载使能
    TIM1->CR1 |= (0x1<<7);
    //11.设置边沿对齐方式
    TIM1->CR1 &= (~(0x3<<5));
    //12.设置递减计数
    TIM1->CR1 |= (0x1<<4);
    //13.设置计数器使能
    TIM1->CR1 |= (0x1<<0);
    
}

//马达
void hal_monitor_init(){
     //rcc章节初始化
    //1.使能gpiof组控制器
    RCC->MP_AHB4ENSETR |= (0x1<<5);
    //2.使能tim16组控制器
    RCC->MP_APB2ENSETR |= (0x1<<3);

    //gpiof组控制器初始化
    //1.设置复用功能模式
    GPIOF->MODER &= (~(0x3<<12));
    GPIOF->MODER |= (0x2<<12);
    //2.设置复用功能为tim1_ch1
    GPIOF->AFRL &= (~(0xf<<24));
    GPIOF->AFRL |= (0x1<<24);

    //tim16章节初始化
    //产生方波 频率1000hz
    //系统提供时钟源位209mhz
    //1.设置预分频器
    TIM16->PSC = 208; //因为时钟频率=fck_psc/(PSC[15:0]+1),所以这里传输208
    //2.设置自动重载值
    TIM16->ARR = 1000; //1000
    //3.设置比较寄存器,控制占空比
    TIM16->CCR1 = 500;  //500
    //4.设置输出比较模式
    TIM16->CCMR1 &= (~(0x7<<4));
    TIM16->CCMR1 &= (~(0x1<<16));
    TIM16->CCMR1 |= (0x6<<4);
    //5.输出比较预加载使能
    TIM16->CCMR1 |= (0x1<<3);
    //6.设置通道1配置为输出
    TIM16->CCMR1 &= (~(0x3<<0));
    //7.设置主输出使能
    TIM16->BDTR |= (0x1<<15);
    //8.设置起始时低电平
    TIM16->CCER |= (0x1 << 3);
    TIM16->CCER |= (0x1<<1);
    //9.使能捕获
    TIM16->CCER |= (0x1<<0); 
    //10.设置自动重载预加载使能
    TIM16->CR1 |= (0x1<<7);
    //11.设置计数器使能
    TIM16->CR1 |= (0x1<<0);
}

main.c

#include "pwm.h"

int main()
{
    hal_beep_init();
    hal_fan_init();
    hal_monitor_init();
    while(1){

    }
    return 0;
}

相关推荐

  1. 0706_ARM8

    2024-07-10 12:58:01       27 阅读
  2. <span style='color:red;'>0703</span>_<span style='color:red;'>ARM</span>7

    0703_ARM7

    2024-07-10 12:58:01      27 阅读
  3. <span style='color:red;'>ARM</span> day<span style='color:red;'>8</span>

    ARM day8

    2024-07-10 12:58:01      48 阅读
  4. ARM day8

    2024-07-10 12:58:01       32 阅读
  5. day<span style='color:red;'>8</span> <span style='color:red;'>ARM</span>

    day8 ARM

    2024-07-10 12:58:01      41 阅读
  6. ARM day8作业

    2024-07-10 12:58:01       40 阅读
  7. ARM.day8

    2024-07-10 12:58:01       40 阅读
  8. ARM-学习day8

    2024-07-10 12:58:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 12:58:01       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 12:58:01       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 12:58:01       90 阅读
  4. Python语言-面向对象

    2024-07-10 12:58:01       98 阅读

热门阅读

  1. uniapp app端跳转第三方app(高德地图/百度地图为例)

    2024-07-10 12:58:01       24 阅读
  2. hive 排序

    2024-07-10 12:58:01       25 阅读
  3. 小程序的制作费用很贵么

    2024-07-10 12:58:01       32 阅读
  4. c#实现23种常见的设计模式--动态更新

    2024-07-10 12:58:01       22 阅读
  5. 银河麒麟(V10SP1)-arm版交叉编译-qt-5.12.12源码

    2024-07-10 12:58:01       23 阅读
  6. 华为机考真题 -- 游戏分组

    2024-07-10 12:58:01       27 阅读