小兴教你做平衡小车-stm32程序开发(PWM)

news2024/11/25 18:45:20

1 程序分享

main.c文件。

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "tim.h"
#include "pwm.h"
#include "stdio.h"

int main(void)
{
	RCC->APB2ENR |= (uint32_t)0x00000010;//打开GPIOC时钟
	GPIOC->CRH   &= (uint32_t)0xFF0FFFFF;//使用前清零
	GPIOC->CRH   |= (uint32_t)0x00300000;//配置PC13为推挽输出,最大速度50MHz
	Delay_Init();//延时初始化
	Usart_Init(115200);//串口初始化
	PWM_Init(899,0);  //(899+1)*(0+1)/72000000hz =  0.0000125s  换成频率为80khz
	TIM_SetCompare1(TIM3,100);//设置PWM占空比
	printf("hello world!\r\n");
	while(1)
	{
		Delay_ms(10);
	}
}

pwm.c文件。

#include "stm32f10x.h"
#include "pwm.h"

void PWM_Init(uint16_t per,uint16_t psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定义定时器的结构体
	GPIO_InitTypeDef GPIO_InitStruct;    //定义GPIO的结构体
	TIM_OCInitTypeDef TIM_OCInitStruct;  //定义输出比较结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//打开GPIOA的时钟、复用时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//打开定时器3时钟
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; //PA6
	GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;//速度为50mhz
	GPIO_Init(GPIOA, &GPIO_InitStruct);//对PA6引脚进行初始化
	
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//1分频
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	TIM_TimeBaseInitStruct.TIM_Period = per;  //自动装载值
	TIM_TimeBaseInitStruct.TIM_Prescaler =	psc;//预分频值
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);//对TIM3进行初始化
	
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;   //PWM1模式
	TIM_OCInitStruct.TIM_OCPolarity = TIM_OCNPolarity_Low;//输出比较极性低
	TIM_OCInitStruct.TIM_OutputState =  TIM_OutputState_Enable;//输出状态使能
	TIM_OCInitStruct.TIM_Pulse = 0;//初始化占空比为0
	TIM_OC1Init(TIM3, &TIM_OCInitStruct);//输出比较初始化
	
	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//输出比较1预装载寄存器使能
	TIM_Cmd(TIM3,ENABLE);//TIM3使能
}

pwm.h文件。

#ifndef __PWM_H
#define __PWM_H

#include "stm32f10x.h"

void PWM_Init(uint16_t per,uint16_t psc);

#endif

2 逻辑分析仪调试

当使用语句时,TIM_SetCompare1(TIM3,100),波形如下图所示。
在这里插入图片描述
当使用语句时,TIM_SetCompare1(TIM3,450),波形如下图所示。
在这里插入图片描述

当使用语句时,TIM_SetCompare1(TIM3,899),波形如下图所示。
在这里插入图片描述
当使用语句时,TIM_SetCompare1(TIM3,900),波形就是一条直线啦。

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

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

相关文章

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

【S32K3驱动配置】-1.1-GPIO配置及其应用-点亮LED灯(基于SDK)

目录(共10页精讲,手把手教你S32K3从入门到精通) 实现的软件架构:基于Drivers层(以往的SDK) 前期准备工作: 1 创建一个FREERTOS工程 2 点亮评估板S32K312EVB-Q172中D13 LED灯 2.1 S32K312EV…

C++ 之LeetCode刷题记录(三十八)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 目标:执行用时击败90%以上使用 C 的用户。 18. 四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target…

Thonny 开发环境下使用PICO系列教程1———利用Pico芯片内置传感器输出温度

Thonny 开发环境下使用PICO系列教程1———利用Pico芯片内置传感器输出温度 一、安装Thonny环境安装测试 在Thonny设定CircuitPython环境硬件部分Thonny部分 利用Pico内置温度传感器输出CPU温度 一、安装Thonny 下载链接: https://github.com/thonny/thonny/releas…

STM32各外设初始化步骤

1、GPIO初始化步骤 1、使能GPIO时钟 2、初始化GPIO的输入/输出模式 3、设置GPIO的输出值或获取GPIO的输入值 GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin…

记事本怎么导入Excel文件 记事本数据导入Excel方法

在日常生活中,记事本软件已经成为了我不可或缺的助手,帮助我记录着点点滴滴,释放了大脑的负担。然而,随着时间的推移,记事本里的内容越来越多,如何高效地整理这些数据成为了一个新的问题。特别是当我需要将…

2024Java高频精选面试题讲解,mysql语句优化面试

前言 一位小伙伴准备了许久的阿里Java面试,原以为能够顺利拿下offer,但在第三面还是被摁在地上反复摩擦,丧气一段时间后,小伙伴调整了心态重新尝试了一下,最终拿下了offer,今天小编把这位小伙伴遇到的面试…

操作系统(笔记)(一)

1、操作系统的功能和目标 1.1功能 存储管理文件管理设备管理处理机管理进程管理 1.2目标 方便性:操作系统作为用户与计算机硬件系统之间的接口,提供了直观的命令和界面,使得用户能够更容易地操作计算机。有效性:操作系统旨在提…

Java基于微信小程序的高校讲座预约系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

SpringBoot集成mongodb

mongodb环境搭建 采用docker-compose搭建,配置文件如下 version: 3# 网桥mongo -> 方便相互通讯 networks:mongo:services:# mongodbmongodb:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/mongo:4.4.6 # 原镜像mongo:4.4.6restart: unless-stoppedcont…

Vue.js+SpringBoot开发天然气工程业务管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四、数据库设计4.1 用户表4.2 分公司表4.3 角色表4.4 数据字典表4.5 工程项目表4.6 使用材料表4.7 使用材料领用表4.8 整体E-R图 五、系统展示六、核心代码6.1 查询工程项目6.2 工程物资…

抖音涨粉技巧揭秘可靠吗是真的吗

抖音涨粉技巧揭秘:真实与可靠 在抖音这样一个火爆的短视频平台上,拥有大量粉丝已成为许多人的追求目标。因此,一些涨粉技巧被推广为能够快速增加粉丝数量的方法。然而,这些技巧到底可靠吗?我们一起来揭秘。 揭秘抖音涨…

Python打发无聊时光:13.用pywin32库制作电脑本地快捷应用

第一步:新建一个simple_app.py 装pywin32库 pip install pywin32 新建一个simple_app.py,复制下面代码,或者可以自己设计内容 import tkinter as tkclass AnimatedGUI:def __init__(self, root):self.root rootself.root.title("玩…

Python爬虫——Requests

目录 简介 基本使用​编辑 ​编辑 安装 一个类型和六个属性 请求类型 GET 代码示例 POST 代码示例 代理 古诗文网绕过验证码登录 总结 简介 Python的Requests库是一个用于发送HTTP请求的常用库。它提供了简单且人性化的API,使得发送HTTP请求变得非常容易。…

【嵌入式——QT】QTableWidget

表格小部件为应用程序提供标准的表格显示功能。QTableWidget中的项由QTableWidgetItem提供。 如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。 常用函数 cellWidget(int row, int column) const:返回显示在给定行和列的单…

嵌入式 Linux 开发的基本概念 及 学习路线

原文链接:https://www.cnblogs.com/DSCC2020/p/13787321.html 1.嵌入式 Linux 开发的基本概念 1.1嵌入式 Linux 的组成 嵌入式 Linux 系统,就相当于一套完整的 PC 软件系统,如下图所示: 1.2嵌入式 Linux 的日常开发流程 Bootloa…

【深度学习】实验10 使用Keras完成逻辑回归

文章目录 使用Keras完成逻辑回归1. 导入Keras库2. 生成数据集3. 构造神经网络模型4. 训练模型5. 测试模型6. 分析模型 附:系列文章 使用Keras完成逻辑回归 Keras是一个开源的深度学习框架,能够高效地实现神经网络和深度学习模型。它由纽约大学的Francoi…

MS5192TA/MS5193TA低噪声、低功耗、16/24 位 ∑-ΔADC

产品简述 MS5192TA/MS5193TA 是一款适合高精度测量应用的低功耗、低 噪声、三通道差分输入的 16bit/24bit 模数转换器。其内部集成了输 入缓冲器、低噪声仪表放大器,当增益设置为 64 ,更新速率为 4.17Hz 时,均方根噪声为 25nV 。集…

uniapp自定义底部导航

我这边使用的是uview组件库&#xff0c;进行开发的&#xff01; <template><view class"footer-bar"><u-tabbar :value"select ? select : 0" change"changeTab" :border"true" :fixed"true" :placeholde…

2025汤家凤考研数学,基础视频课程+百度网盘+PDF真题讲解

平时大家都半开玩笑地讲&#xff1a;我数学想要考150分&#xff01;那索性今天这一期&#xff0c;今天认真和大家聊一下&#xff1a; 想考到考研数学150分&#xff0c;应该如何准备&#xff1f; 如果还有小伙伴不知道在哪看汤神的ke&#xff0c;可以看一下以下 2025汤神全程…