arm学习stm32芯片学习方波启动蜂鸣器,马达,风扇

news2024/10/6 15:27:18

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_beep_init1();
	//马达
	 hal_pwm_motor_init1();
	//风扇
	 hal_pwm_blower_init1();
	while(1)
	{
	
	}
	return 0;
}

pwm.h

#ifndef __PWM_H__
#define __PWM_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"
#include "stm32mp1xx_rcc.h"
//pwm方波
//蜂鸣器初始化
void hal_pwm_beep_init();
//马达
void hal_pwm_motor_init();
//风扇
void hal_pwm_blower_init();
//普通输出模式
//蜂鸣器初始化
void hal_pwm_beep_init1();
//马达
void hal_pwm_motor_init1();
//风扇
void hal_pwm_blower_init1();
#endif

pwm.c

#include"pwm.h"
//蜂鸣器初始化
void hal_pwm_beep_init(){
		//RCC初始化 PB6 使能ahb4 和apb1总线
		RCC->MP_AHB4ENSETR |= (0x1 << 1);
		RCC->MP_APB1ENSETR |= (0x1 << 2);
		//GPIO初始化
		//设置PE6引脚为复用模式 mode[13:12] 10
		GPIOB->MODER &=(~(0x3 << 12));
		GPIOB->MODER |= (0x1 <<13);
		//设置复用功能为TIM4 为AF2  [27:24] 0010
		GPIOB->AFRL &= (~(0xf << 24));
		GPIOB->AFRL |= (0x1 << 25);
		//TIM4初始化 
		TIM4->CR1 &=(~((0xf << 4)+0x1));
		TIM4->CR1 |=(0x1 << 7);
		TIM4->CR1 |=(0x1 << 4);
		TIM4->CR1 |=(0x1);
		//PWM方波频率为1000HZ
		//系统提供的时钟源为209MHZ
		//设置分频值 系统会自动加1
		TIM4->PSC =209-1;
		//设置自动重载计数器的值
		TIM4->ARR = 1000;
		//设置递减
		TIM4->CCR1 = 300;
		//设置输出捕获模式
		TIM4->CCMR1 &=(~(0x3));
		TIM4->CCMR1 &=(~(0X1 << 16));
		TIM4->CCMR1 &=(~(0X7 << 4));
		TIM4->CCMR1 |=(0x6 << 4);
		TIM4->CCMR1 |=(0x1 << 3);

		//设置捕获、比较寄存器
		TIM4->CCER |=(0x3);
		TIM4->CCER |=(~(0x1 << 3));

}
//马达
void hal_pwm_motor_init(){
		//RCC初始化 PF6 使能ahb4 和apb1总线
		RCC->MP_AHB4ENSETR |= (0x1 << 5);
		RCC->MP_APB2ENSETR |= (0x1 << 3);
		//GPIO初始化
		//设置PF6引脚为复用模式 mode[13:12] 10
		GPIOF->MODER &=(~(0x3 << 12));
		GPIOF->MODER |= (0x1 <<13);
		//设置复用功能为TIM4 为AF1  [27:24] 0001
		GPIOF->AFRL &= (~(0xf << 24));
		GPIOF->AFRL |= (0x1 << 24);
		//TIM4初始化 
		TIM16->CR1 &=(~((0xf << 4)+0x1));
		TIM16->CR1 |=(0x1 << 7);
		TIM16->CR1 |=(0x1 << 4);
		TIM16->CR1 |=(0x1);
		//PWM方波频率为1000HZ
		//系统提供的时钟源为209MHZ
		//设置分频值 系统会自动加1
		TIM16->PSC =209-1;
		//设置自动重载计数器的值
		TIM16->ARR = 1000;
		//设置递减
		TIM16->CCR1 = 300;
		//设置输出捕获模式
		TIM16->CCMR1 &=(~(0x3));
		TIM16->CCMR1 &=(~(0X1 << 16));
		TIM16->CCMR1 &=(~(0X7 << 4));
		TIM16->CCMR1 |=(0x6 << 4);
		TIM16->CCMR1 |=(0x1 << 3);

		//设置捕获、比较寄存器
		TIM16->CCER |=(0x3);
		TIM16->CCER |=(~(0x1 << 3));
		TIM16->BDTR |=(0x1 <<15);

}
//风扇
void hal_pwm_blower_init(){
	//RCC初始化 PE9 使能ahb4 和apb1总线
		RCC->MP_AHB4ENSETR |= (0x1 << 4);
		RCC->MP_APB2ENSETR |= (0x1);
	//GPIO初始化
		//设置PE9引脚为复用模式 mode[13:12] 10
		GPIOE->MODER &=(~(0x3 << 18));
		GPIOE->MODER |= (0x1 <<19);
	//设置复用功能为TIM4 为AF1  [7:4] 0001
		GPIOE->AFRH &= (~(0xf << 4));
		GPIOE->AFRH |= (0x1 << 4);
		//TIM4初始化 
		TIM1->CR1 &=(~((0xf << 4)+0x1));
		TIM1->CR1 |=(0x1 << 7);
		TIM1->CR1 |=(0x1 << 4);
		TIM1->CR1 |=(0x1);
		//PWM方波频率为1000HZ
		//系统提供的时钟源为209MHZ
		//设置分频值 系统会自动加1
		TIM1->PSC =209-1;
		//设置自动重载计数器的值
		TIM1->ARR = 1000;
		//设置递减
		TIM1->CCR1 = 300;
		//设置输出捕获模式
		TIM1->CCMR1 &=(~(0x3));
		TIM1->CCMR1 &=(~(0X1 << 16));
		TIM1->CCMR1 &=(~(0X7 << 4));
		TIM1->CCMR1 |=(0x6 << 4);
		TIM1->CCMR1 |=(0x1 << 3);

		//设置捕获、比较寄存器
		TIM1->CCER |=(0x3);
		TIM1->CCER |=(~(0x1 << 3));
		TIM1->BDTR |=(0x1 <<15);

}





//蜂鸣器初始化
void hal_pwm_beep_init1(){
		//RCC初始化 PB6 使能ahb4 
		RCC->MP_AHB4ENSETR |= (0x1 << 1);
		//GPIO初始化
		//设置PE6引脚为复用模式 mode[13:12] 10
		GPIOB->MODER &=(~(0x3 << 12));
		GPIOB->MODER |= (0x1 <<12);
		GPIOB->OTYPER &=(~(0x1 << 6));
		GPIOB->OSPEEDR &=(~(0x1 << 13));
		GPIOB->OSPEEDR |=(0x1 <<12);
		GPIOB->PUPDR &=(~(0x3 <<12));
		GPIOB->ODR |=(0x1 << 6);
}
//马达
void hal_pwm_motor_init1(){
		//RCC初始化 PF6 使能ahb4 
		RCC->MP_AHB4ENSETR |= (0x1 << 5);
		//GPIO初始化
		//设置PF6引脚为复用模式 mode[13:12] 10
		GPIOF->MODER &=(~(0x3 << 12));
		GPIOF->MODER |= (0x1 <<12);

		GPIOF->OTYPER &=(~(0x1 << 6));
		GPIOF->OSPEEDR &=(~(0x1 << 13));
		GPIOF->OSPEEDR |=(0x1 <<13);
		GPIOF->PUPDR &=(~(0x3 <<12));
		GPIOF->ODR |=(0x1 << 6);

}
//风扇
void hal_pwm_blower_init1(){
	//RCC初始化 PE9 使能ahb4
		RCC->MP_AHB4ENSETR |= (0x1 << 4);
	//GPIO初始化
		//设置PE9引脚为复用模式 mode[13:12] 10
		GPIOE->MODER &=(~(0x3 << 18));
		GPIOE->MODER |= (0x1 <<18);
		GPIOE->OTYPER &=(~(0x1 << 9));
		GPIOE->OSPEEDR &=(~(0x1 << 18));
		GPIOE->OSPEEDR |=(0x1 <<19);
		GPIOE->PUPDR &=(~(0x3 <<18));
		GPIOE->ODR |=(0x1 << 9);

}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 06 :多表查询

MySQL 05 :多表查询 加where过滤 老韩分析 1。雇员名&#xff0c;雇员工资来自emp表 2。部门的名字来自dept表 3。 需求对emp和dept查询 ename&#xff0c;sal&#xff0c;dname&#xff0c;deptno 4。 当我们需要指定显示某个表的列是&#xff0c;需要表&#xff0c; 说明 …

视频的特效效果是怎么加的?可以批量添加吗

经常逛自媒体平台的小伙伴不难发现&#xff0c;要想原创的短视频更有创造性&#xff0c;内容更丰富&#xff0c;给视频添加特效效果算是比较常用的一个方法了。今天小编要分享的可不只是单一地给视频添加特效这么简单&#xff0c;我要给大家分享如何才能快速地批量给视频素材添…

Linux 学习记录46(QT篇)

Linux 学习记录46(QT篇) 本文目录 Linux 学习记录46(QT篇)一、建立QT项目工程二、Assistant帮助文档的使用三、自动生成的文件介绍1. tempprj.pro2. mainwindow.h3. mainwindow.cpp4. main.cpp5. mainwindow.ui 四、常用类的介绍1. 信息调试类(1. qDebug(2. 输出当前界面尺寸(3…

stm32(DMA)

DMA介绍 什么是DMA&#xff1f; 令人头秃的描述&#xff1a; DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设 与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于 CPU&#xff0c;在这…

解决Anaconda第三方库下载慢

1.打开Anconda Prompt&#xff0c;进入后台 2.执行命令第一个是添加一个清华镜像&#xff0c;第二个设置在 conda 显示通道的 URL。 &#xff08;1&#xff09;conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ &#xff08;2&#xff0…

无线振动传感器之利:实现设备远程监控和管理

在现代工业生产中&#xff0c;设备的远程监控和管理对于提高生产效率和降低成本至关重要。而无线振动传感器作为一种先进的监测技术&#xff0c;能够快速实现设备的远程监控&#xff0c;提供实时的振动数据和设备健康状况&#xff0c;为企业的运维管理带来了许多优势。本文将介…

第十九章:Linux中安装MySQL

第十九章&#xff1a;Linux中安装MySQL 19.1&#xff1a;卸载MySQL 查看是否安装过MySQL # 如果你是用rpm安装&#xff0c;检查一下RPM PACKAGE rpm -qa | grep -i mysql # 检查 mysql service systemctl status mysqld.service # CentOS6和CentOS7在MySQL的使用中的区别 # 防…

React-Native学习,RN的容器Flex-Box布局

justify-content&#xff08;在RN中属性名称为&#xff1a;justifyContent&#xff09;在主轴上对齐方式 align-items&#xff08;在RN中属性名称为&#xff1a;alignItems&#xff09;在交叉轴上的对齐方式 在React Native中&#xff0c;当没有设置容器的主轴方向时&#xf…

Web-文件上传

需求 新增员工和修改员工的需求会需要上传对应的图像 先实现对应的新增需求吧 &#xff01;&#xff01;&#xff01;RequestBody,因为传参是json格式&#xff0c;还是看对应接口文档&#xff01;&#xff01;&#xff01; controller service mapper xml 对应代码 &…

Jstat命令解析

Jstat命令解析 Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”&#xff0c;它位于java的bin目录下&#xff0c;主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控&#xff0c;包括了对Heap size和垃圾回收…

单元测试与端到端测试——主要区别

目录 前言&#xff1a; 什么是单元测试&#xff1f; 单元测试生命周期 单元测试的好处 那么它有什么好处呢&#xff1f; 单元测试示例 单元测试的类型 单元测试工具 什么是端到端测试&#xff1f; 端到端测试 端到端测试的主要好处是什么&#xff1f; 端到端测试示…

Tauri 应用中发送 http 请求

最近基于 Tauri 和 React 开发一个用于 http/https 接口测试的工具 Get Tools&#xff0c;其中使用了 tauri 提供的 fetch API&#xff0c;在开发调试过程中遇到了一些权限和参数问题&#xff0c;在此记录下来。 权限配置 在 tauri 应用中&#xff0c;如果想要使用 http 或 fe…

小白到运维工程师自学之路 第四十九集 (正则表达式之grep)

一、概述 1、正则表达式&#xff08;Regular Expression&#xff0c;简称为RegExp或Regex&#xff09;是一种用于描述、匹配和操作文本的字符串模式的表达式。它提供了一种强大而灵活的方式来进行字符串的搜索、替换、提取和验证操作。 2、正则表达式可以用于各种编程语言和应…

SpringBoot第25讲:SpringBoot对TypeHandler的使用

SpringBoot第25讲&#xff1a;SpringBoot对TypeHandler的使用 本文是SpringBoot第25讲&#xff0c;SpringBoot对TypeHandler的使用&#xff0c;TypeHandler就是当SpringBoot 实体类中字段类型和数据库中字段类型不一致时进行使用。 文章目录 SpringBoot第25讲&#xff1a;Sprin…

基环树学习笔记

0.前言 只因环树学习笔只因。 如有错误欢迎指出。 1.基本概念 这名字读起来感觉有点矛盾&#xff0c;怎么可能树上面有一个环呢&#xff1f; 我们把它放到百度翻译里面看看。 顾名思义&#xff0c;基环树不是一棵树&#xff0c;而是一颗假树&#xff0c;他的定义是&#…

Acwing.861 二分图的最大匹配(匈牙利算法)

题目 给定一个二分图&#xff0c;其中左半部包含nq个点(编号1n1)&#xff0c;右半部包含ng个点(编号1n2)&#xff0c;二分图共包含m条边。 数据保证任意—条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。 给定一个二分图G&#xff0c;在G的一个子图M中&…

软件测试基础认知

日升时奋斗&#xff0c;日落时自省 目录 1、测试需求 2、测试用例 3、软件测试BUG 4、开发模型 4.1、软件的生命周期 4.2、瀑布模型&#xff08;waterFall Model&#xff09; 4.3、螺旋模型 4.4、 增量模型 4.4.1、增量开发 4.4.2、迭代开发 4.5、敏捷开发&#xf…

【PDFBox】PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系

这篇文章&#xff0c;主要介绍PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系。 目录 一、PDFBox组件 1.1、什么是PDFBox 1.2、创建PDF文档 1.3、加载PDF文档 1.4、添加空白页面 1.5、删除某个页面 1.6…

三分钟了解 SpringBoot 的启动流程

一、前言 背景&#xff1a;最近有位开发同学说面试被问到Spring Boot 的启动流程&#xff0c;以及被问到Spring Boot 的嵌入式Web容器是什么时候加载的。如何加载的。是怎么无缝切换的。 这些问题&#xff0c;其实回答起来也是比较复杂的。我们今天就从 SpringApplication.ru…

3D设计建模软件The Foundry Modo 16对Mac和Windows的系统要求

Foundry MODO是一款功能强大的三维建模、动画和渲染软件。它为艺术家和设计师提供了一套全面的工具&#xff0c;可以用来创建令人惊叹的视觉效果。无论是制作电影、电视节目、游戏还是其他数字媒体内容&#xff0c;MODO都可以满足您的需求。 MODO具有直观的用户界面&#xff0…