ARM-cortexA7-PWM实验

news/2024/11/30 1:50:22/

目录

pwm.h

pwm.c

main.c


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);// 风扇初始化
void hal_fan_init(void);// 马达初始化
void hal_monitor_init(void);#endif // __PWM_H__

pwm.c

#include "pwm.h"void hal_pwm_init(void)
{// RCC章节初始化RCC->MP_AHB4ENSETR |= (0x1 << 1);RCC->MP_APB1ENSETR |= (0x1 << 2);// GPIO章节初始化 PB6// 设置引脚为复用模式GPIOB->MODER &= ~(0x3 << 12);GPIOB->MODER |= (0x2 << 12);// 设置引脚为对应复用功能GPIOB->AFRL &= ~(0xf << 24);GPIOB->AFRL |= (0x6 << 24);// TIM4章节初始化  方波频率1000HZ  占空比70% / 30%// 设置分频TIM4->PSC |= 0xD0; // 208MHz + 1// 设置自动重载计数器TIM4->ARR &= ~(0xff);TIM4->ARR |= 0x3E8; // 1000// 初始化/使能相关内容TIM4->CR1 &= ~(0xf << 4);TIM4->CR1 |= (0x9 << 4);TIM4->CR1 |= 0x1; // 设置计数使能// 初始化/使能设置捕获/比较寄存器// 设置捕获/比较寄存器使能TIM4->CCMR1 |= (0x1 << 3);// 设置为pwm模式TIM4->CCMR1 &= ~(0x1 << 16);TIM4->CCMR1 &= ~(0x7 << 4);TIM4->CCMR1 |= (0x6 << 4);// 配置通道1为输出模式TIM4->CCMR1 &= ~(0x3);// 设置设置捕获/比较寄存器为300TIM4->CCR1 &= ~(0xff);TIM4->CCR1 |= 0x12C;// 设置捕获/比较寄存器使能TIM4->CCER &= ~(0x1 << 3); // 设置捕获/比较寄存器使能TIM4->CCER |= (0x1 << 1);  // 设置捕获/比较寄存器起始状态为高电平TIM4->CCER |= 0x1;         // 设置捕获/比较寄存器使能
}void hal_fan_init(void)
{// RCC章节初始化RCC->MP_AHB4ENSETR |= (0x1 << 4);RCC->MP_APB2ENSETR |= 0x1;// GPIO章节初始化 PE9// 设置引脚为复用模式GPIOE->MODER &= ~(0x3 << 18);GPIOE->MODER |= (0x2 << 18);// 设置引脚为对应复用功能GPIOE->AFRH &= ~(0xf << 4);GPIOE->AFRH |= (0x1 << 4);// TIM1章节初始化  方波频率1000HZ  占空比70% / 30%// 设置分频TIM1->PSC |= 0xD0; // 208MHz + 1// 设置中断\死亡时间寄存器TIM1->BDTR |= (0x1 << 15);// 设置自动重载计数器TIM1->ARR &= ~(0xff);TIM1->ARR |= 0x3E8; // 1000// 初始化/使能相关内容TIM1->CR1 &= ~(0xf << 4);TIM1->CR1 |= (0x9 << 4);TIM1->CR1 |= 0x1; // 设置计数使能// 初始化/使能设置捕获/比较寄存器// 设置捕获/比较寄存器使能TIM1->CCMR1 |= (0x1 << 3);// 设置为pwm模式TIM1->CCMR1 &= ~(0x1 << 16);TIM1->CCMR1 &= ~(0x7 << 4);TIM1->CCMR1 |= (0x6 << 4);// 配置通道1为输出模式TIM1->CCMR1 &= ~(0x3);// 设置设置捕获/比较寄存器为300TIM1->CCR1 &= ~(0xff);TIM1->CCR1 |= 0x12C;// 设置捕获/比较寄存器使能TIM1->CCER &= ~(0x1 << 3); // 设置捕获/比较寄存器使能TIM1->CCER |= (0x1 << 1);  // 设置捕获/比较寄存器起始状态为高电平TIM1->CCER |= 0x1;         // 设置捕获/比较寄存器使能
}void hal_monitor_init(void)
{// RCC章节初始化RCC->MP_AHB4ENSETR |= (0x1 << 5);RCC->MP_APB2ENSETR |= (0x1 << 3);// GPIO章节初始化 PF6// 设置引脚为复用模式GPIOF->MODER &= ~(0x3 << 12);GPIOF->MODER |= (0x2 << 12);// 设置引脚为对应复用功能GPIOF->AFRL &= ~(0xf << 24);GPIOF->AFRL |= (0x1 << 24);// TIM1章节初始化  方波频率1000HZ  占空比70% / 30%// 设置分频TIM16->PSC |= 0xD0; // 208MHz + 1// 设置中断\死亡时间寄存器TIM16->BDTR |= (0x1 << 15);// 设置自动重载计数器TIM16->ARR &= ~(0xff);TIM16->ARR |= 0x3E8; // 1000// 初始化/使能相关内容TIM16->CR1 &= ~(0xf << 4);TIM16->CR1 |= (0x9 << 4);TIM16->CR1 |= 0x1; // 设置计数使能// 初始化/使能设置捕获/比较寄存器// 设置捕获/比较寄存器使能TIM16->CCMR1 |= (0x1 << 3);// 设置为pwm模式TIM16->CCMR1 &= ~(0x1 << 16);TIM16->CCMR1 &= ~(0x7 << 4);TIM16->CCMR1 |= (0x6 << 4);// 配置通道1为输出模式TIM16->CCMR1 &= ~(0x3);// 设置设置捕获/比较寄存器为300TIM16->CCR1 &= ~(0xff);TIM16->CCR1 |= 0x12C;// 设置捕获/比较寄存器使能TIM16->CCER &= ~(0x1 << 3); // 设置捕获/比较寄存器使能TIM16->CCER |= (0x1 << 1);  // 设置捕获/比较寄存器起始状态为高电平TIM16->CCER |= 0x1;         // 设置捕获/比较寄存器使能
}

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()
{hal_pwm_init();hal_fan_init();hal_monitor_init();while (1){}return 0;
}


http://www.ppmy.cn/news/123623.html

相关文章

rails -在数据库里看表结构

在 Rails 中&#xff0c;可以使用 ActiveRecord Migration 文件来管理数据库的表结构。具体来说&#xff0c;可以使用以下命令来查看所创建的 Migration 文件&#xff1a; # ruby rails db:migrate:status该命令会列出已经运行过的所有 Migration 文件和它们的状态。 此外&am…

django-vue-admin-pro 使用

地址&#xff1a; GitHub - dvadmin-pro/django-vue-admin-pro 一、准备工作 Python > 3.8.0 (推荐3.9版本) nodejs > 14.0 (推荐最新) Mysql > 5.7.0 (可选&#xff0c;默认数据库sqlite3&#xff0c;推荐8.0版本) Redis(可选&#xff0c;最新版)项目运行及部署 |…

自学网络安全, 一般人我劝你还是算了吧

前言&#xff1a;自学我劝你还是算了&#xff0c;我为什么要劝你放弃我自己却不放弃呢&#xff1f;因为我不是一般人。。。 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 …

如何测试Vue应用程序中的组件和代码?

测试Vue应用程序的组件和代码是非常重要的&#xff0c;这可以确保你的程序在生产环境中稳定运行。 首先&#xff0c;我想强调的是&#xff1a;不要害怕测试&#xff01;实际上&#xff0c;测试是一个非常有趣的过程&#xff0c;它可以帮助你更好地理解你的代码&#xff0c;并且…

Springboot以Post方式导出excel文件

场景&#xff1a; 导出excel文件&#xff0c;但是需要传入参数&#xff0c;get方法传参懂的都懂&#xff0c;所以改成post方式 少废话&#xff0c;上代码&#xff1a; Controller: PostMapping(value "/exportCustomMItemDataWithLine.iom") ResponseBody ApiOp…

ic验证的主要工作流程和验证工具是什么?

验证其实是一个“证伪”的过程&#xff0c;从流程到工具&#xff0c;验证工程师的终极目的都只有一个&#xff1a; 发现所有BUG&#xff0c;或者证明没有BUG&#xff0c;以保证芯片功能性能的正确性和可靠性。 验证环节对于一颗芯片的重要性也是不言而喻的&#xff1a; 从项…

29Maven高级

一、分模块设计与开发 1、介绍 2、tlias-pojo模块 然后把pojo复制过去。pom中加入lombok依赖 引入tlias-pojo依赖 3、tlias-utils模块 tlias-utils的pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.…

直饮加热一体机哪个牌子好,净水器科普

直饮加热一体机哪个牌子好&#xff0c;冰尊直饮加热一体机净水器最好&#xff01;生活中想要喝上一杯温度适宜的好水&#xff0c;怎么能少得了直饮加热一体机&#xff0c;直饮加热一体机不仅可以净化水质还可以调节问题&#xff0c;非常方便。那么直饮加热一体机净水器哪个牌子…