STM32单片机设置PWM输出完整教程

发布者:tgdddt最新更新时间:2023-09-21 来源: elecfans关键字:STM32  单片机  PWM输出 手机看文章 扫描二维码
随时随地手机看文章

STM32单片机   PWM


环境:

主机:XP


开发环境:MDK4.23

MCU:STM32F103CBT6

说明:

使用内部8M晶振,倍频到64M供给TIM3定时器,PA6(通道1)上产生640K,50%方波

源代码:

初始化时钟:

//初始化RCC时钟

voidinit_rcc(void)

{

//将外设RCC寄存器重设为缺省值

RCC_DeInit();

//内部晶振使能

RCC_HSICmd(ENABLE);

//等待工作稳定

while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);

//LSI的启动,提供给看门狗时钟

RCC_LSICmd(ENABLE);//打开LSI

while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);//等待直到LSI稳定

if(1)

{

//使能预取指缓存

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

//设置FLASH存储器延时时钟周期数。(设置为延时2个时钟周期)

FLASH_SetLatency(FLASH_Latency_2);

//设置AHB时钟(HCLK)(这时设置为=系统时钟)

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//设置SDIO的AHB时钟(HCLK2)(这时设置为=HCLK),64M

RCC_PCLK2Config(RCC_HCLK_Div1);

//设置APB1外设时钟(HCLK1)(这时设置为=HCLK/2),32M

RCC_PCLK1Config(RCC_HCLK_Div2);

//ADCCLK=PCLK2/8,1M

RCC_ADCCLKConfig(RCC_PCLK2_Div8);

//PLL的时钟来源及倍频的倍数,此处设置为64MHz

RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_16);

//使能PLL

RCC_PLLCmd(ENABLE);

//检测PLL是否就绪

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

//设置PLL为系统时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//检测系统的时钟源是否是PLL

while(RCC_GetSYSCLKSource()!=0x08);

}

}

初始化IO口和定时器:

//设置IO口

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//设置定时器3

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

//重新将TImer设置为缺省值

TIM_DeInit(TIM3);

//采用内部时钟给TIM3提供时钟源

TIM_InternalClockConfig(TIM3);

timInitStruct.TIM_ClockDivision=TIM_CKD_DIV2;

timInitStruct.TIM_Prescaler=0;//计数频率为64M

timInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数

timInitStruct.TIM_RepetitionCounter=0;

timInitStruct.TIM_Period=100;//这个值实际上就是TIMX-》ARR,延时开始时重新设定即可

TIM_TimeBaseInit(TIM3,&timInitStruct);

//设置PWM输出

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse=50;

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;

TIM_OC1Init(TIM3,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

//ARR预装载缓冲器使能

TIM_ARRPreloadConfig(TIM3,ENABLE);

//开启定时器

TIM_Cmd(TIM3,ENABLE);

输出波形:


关键字:STM32  单片机  PWM输出 引用地址:STM32单片机设置PWM输出完整教程

上一篇:STM32系统的应用中如何避免数据受断电影响
下一篇:STM32MP135嵌入式核心板如何助力充电桩发展

推荐阅读最新更新时间:2024-11-16 21:56

STM32串口通信简明知识
什么是串口通讯? 串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行 通信 慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。 典型的串口通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,所以 端口 能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的 参数 是波特率、数据位、停止位和奇偶的校验。对于两个需要进行串口通信的端口,这些参数必须匹配,这也是能够实现串口通讯的前提。如下是串行通讯示数据传输意图。 串口通讯的通讯协议 最初数据是 模拟 信号 输出简单过程量,后来仪表 接口 出现了 RS232 接口,这种接口可以实现点对点
[单片机]
<font color='red'>STM32</font>串口通信简明知识
基于单片机的直流无刷电机控制系统设计
1 无刷直流电动机控制原理 无刷直流电动机系统由电动机、转子位置传感器、电子开关线路和驱动电路等4部分组成。其工作原理图如图1所示。 直流电源通过驱动和开关电路向电动机的定子绕组供电,提供励磁电流,位置传感器随时检测到转子位置,并根据转子的位置信号控制开关管的导通和截止,从而实现电子换向。随着电动机转子永磁体的转动,作用于位置传感器H1、H2、H3的磁场方向N-S极发生变换,使位置传感器产生相位差为120°的方波信号,如图2所示波形。 随着电动机转子永磁体的转动,作用于3个位置传感器HALL1、HALL2、HALL3的磁场方向N-S极发生变换,使位置传感器产生相位差为120°的6状态编码信号:101、100
[单片机]
基于<font color='red'>单片机</font>的直流无刷电机控制系统设计
IAR Embedded Workbench现已支持性价比出众的新型STM32 MCU系列
IAR Embedded Workbench现已支持性价比出众的新型STM32 MCU系列 IAR携手ST帮助成本敏感型应用的开发人员从8位/16位MCU转向全新的入门级32位STM32 MCU系列 瑞典乌普萨拉–2023年2月23日–意法半导体(STMicroelectronics,以下简称 ST)最近推出了性价比出众的STM32C0系列产品,为开发人员降低了STM32入门门槛。 现在,嵌入式开发软件和服务的全球领导者、ST的授权合作伙伴IAR 宣布支持这款热门STM32微控制器的最新产品系列。性能强大的IAR Embedded Workbench for Arm可帮助开发人员构建紧凑的代码并加以优化,以及提供全面
[单片机]
IAR Embedded Workbench现已支持性价比出众的新型<font color='red'>STM32</font> <font color='red'>MCU</font>系列
STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
前言: 今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收,本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 5、串口: 使用USART1 PA9,PA10 知识概括: 通过本篇博客您将学到: STM32CubeMX创建串口例程 HAL库UATR函数库
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32CubeMX教程四---UART串口通信详解
基于51单片机的无线遥控小车设计
这次的院里的电子设计竞赛我们做的是遥控小车。其实两个礼拜前就做完了,工作量加起来其实也就2天的功夫,之后由于懒,所以大家就没有往里面加入东西发挥。今晚答辩被老师说了一顿,还好老师都是认识的,我们有多少实力都清楚。无所谓了,呵呵,又要开始做其他的东西了。这个课题本身就是很简单的。还是不废话了上图吧。 这是遥控器,当然焊工不错(关键是看背面,阿康的技术绝对OK)【实物图】 这个是遥控器的【原理图】,上一幅图的绿色的PCB板子就是原理图上的2262,这个模块是老师发的包括有接收的2272,因为地址码已经做好了,所以只要发数据码就可以了,联系到接收,因为接收有悬空、0、1的三种状况,为了避免误发信息所以将悬空的功能隐去,只在按键
[单片机]
基于51<font color='red'>单片机</font>的无线遥控小车设计
STM32中的WFI和WFE指令的意思
进入低功耗模式的两个指令,这是ARM里CMSIS内核中的指令。详情请参考链接里大神们的讨论链接http://www.wowotech.net/armv8a_arch/wfe_wfi.html cmsis_arm.cc里有如下说明 /** brief Wait For Interrupt details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ #define __WFI __wfi /** brief Wait For E
[单片机]
51单片机实现音频频谱显示的快速算法研究
1 引言 在家庭影院、卡拉OK等音响系统中,实时显示音乐信号的频谱将为音响系统增添不少色彩。目前实际生产的音响系统产品,大多采用以下两种方法实现音频频谱显示:一是利用硬件滤波器和A/D转换器;二是利用DSP处理频谱显示。前者实现简单,但硬件成本高,后者软件和硬件实现都较复杂。这里针对单片机RAM资源少、运算速度慢的特点,提出一种切实可行的快速傅里叶变换算法实现频谱显示。 2 系统整体设计及原理 该系统设计由单片机SST89V58RD2、音频数据采样电路、A/D转换电路、频谱显示电路等部分组成。图1为系统整体设计原理框图。 该系统从功能上可划分成3部分:(1)音频数据采集电路实现模拟音频信号的采样保持和量化处
[单片机]
51<font color='red'>单片机</font>实现音频频谱显示的快速算法研究
STM32小白入门(第16天)-------红外
一、定义 远程遥控技术又称为遥控技术,是指实现对被控目标的遥远控制,在工业控制、航空航天、家电领域应用广泛。 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机和手机系统中。 随着家用电器、视听产品的普及,红外线遥控器已被广泛使用在各种类型的家电产品上(如遥控开关、智能开关等)。其具有体积小、抗干扰能力强、功耗低、成本低等特点,在工业设备中也得到广泛应用。一般而言,一个通用的红外遥控系统由发射和接收两大部分组成,如下图所示: 二、基本原理 红外遥控的发射电路是采用红外发光
[单片机]
<font color='red'>STM32</font>小白入门(第16天)-------红外
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多开源项目推荐
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved