首页 > 其他分享 >回忆录——ST定时器PWM输出

回忆录——ST定时器PWM输出

时间:2024-05-03 23:34:56浏览次数:20  
标签:TIM2 TimeBaseInitStructure 定时器 ST TIM OCInitStructure GPIO PWM 时钟

老规矩,看图说写驱动

  1. RCC开GPIO及TIM时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟
  2. 选择时基源,配置时基单元,PSC、ARR、CNT
点击查看代码
	/*配置时钟源*/
	TIM_InternalClockConfig(TIM2);		//选择TIM2为内部时钟,若不调用此函数,TIM默认也为内部时钟
	
	/*时基单元初始化*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定义结构体变量
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,选择向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;					//计数周期,即ARR的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;				//预分频器,即PSC的值
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重复计数器,高级定时器才会用到
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);             //将结构体变量交给TIM_TimeBaseInit,配置TIM2的时基单元
3. 配置比较单元,CCR值、比较模式、极性选择等
点击查看代码
/*输出比较初始化*/
	TIM_OCInitTypeDef TIM_OCInitStructure;							//定义结构体变量
	TIM_OCStructInit(&TIM_OCInitStructure);							//结构体初始化,若结构体没有完整赋值
																	//则最好执行此函数,给结构体所有成员都赋一个默认值
																	//避免结构体初值不确定的问题
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;				//输出比较模式,选择PWM模式1
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;		//输出极性,选择为高,若选择极性为低,则输出高低电平取反
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//输出使能
	TIM_OCInitStructure.TIM_Pulse = 0;								//初始的CCR值
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);						//将结构体变量交给TIM_OC1Init,配置TIM2的输出比较通道1
4. 配置对应的GPIO,复用推挽模式
点击查看代码
/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;		//GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);							//将PA0引脚初始化为复用推挽输出	
																	//受外设控制的引脚,均需要配置为复用模式		
5. 启动计数器 `TIM_Cmd(TIM2, ENABLE); //使能TIM2,定时器开始运行`
  1. 主程序设置占空比
    TIM_SetCompare1(TIM2, 50); //设置CCR1的值
    END

标签:TIM2,TimeBaseInitStructure,定时器,ST,TIM,OCInitStructure,GPIO,PWM,时钟
From: https://www.cnblogs.com/qjjim4231/p/18171821

相关文章

  • requestVideoFrameCallback
    requestVideoFrameCallback:将新视频帧发送到合成器时运行的回调函数requestVideoFrameCallback()的用法与Window.requestAnimationFrame()相同。您可以使用它来运行一个回调函数,该函数在下一个视频帧发送到合成器时执行某些操作。当合成下一个视频帧时,再次调用requestVid......
  • C语言 Stack功能实现(自存)
    #include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedefintE;typedefstructnode{Edata;structnode*next;}Node;typedefstruct{Node*top;intsize;}Stack;//APIStack*stack_create(void);void......
  • SystemVerilog -- 3.0 SystemVerilog Loops
    SystemVerilogLoopsWhatareloops?loop是一段不断执行的代码。条件语句通常包含在循环中,以便在条件变为真时终止。如果loop永远运行,那么模拟将无限期挂起。下表给出了SystemVerilog中不同类型的循环构造。\\foreverRunsthegivensetofstatementsforever......
  • std::move 和 std::forward源码解析
    std::move和std::forward仅仅是执行转换(cast)的函数(事实上是函数模板)。std::move无条件的将它的实参转换为右值,而std::forward只在特定情况满足时下进行转换。std::movetemplate<class_Ty>constexprremove_reference_t<_Ty>&&move(_Ty&&_Arg)noexcept{returnstatic......
  • 关于stm32F103ZET6移植到stm32F103C8T6的步骤
    在一次代码移植过程中,突然发现代码移植后不可以使用,代码是stm32f103zet6的代码,刚好当时我使用的是C8T6的芯片我进行移植到C8T6芯片时,代码报错"Error:FlashDownloadfailed-"Cortex_M3"这种报错。当时直接懵逼了。想了半天没有想到原因,我就在想不都是F103系列的代码吗为啥子不可......
  • SystemVerilog -- 2.21 Data Types ~ SystemVerilog typedef and alias
    SystemVerilogtypedefandaliasTypedef在复杂的测试平台中,某些变量声明可能具有更长的数据类型规范,后者需要在测试平台的多个位置使用。在这种情况下,我们可以使用a为现有数据类型提供用户定义的名称。然后,可以在整个代码中使用新的数据类型,因此如果需要,无需在多个位置进行编......
  • SystemVerilog -- 2.20 Data Types ~ SystemVerilog Structure
    SystemVerilogStructureStructure可以包含不同数据类型的元素,这些元素可以作为一个整体引用,也可以通过其名称单独引用。这些元素具有相同数据类型的数组完全不同。//Normalarrays->acollectionofvariablesofsamedatatypeintarray[10];//allelements......
  • [转帖]Introducing Exadata Cloud@Customer X10M
    https://blogs.oracle.com/database/post/introducing-exadata-cloudcustomer-x10m  ExtremeScalewithDramaticallyImprovedPricePerformanceWeareexcitedtoannounceExadataCloud@CustomerX10M,thelatestgenerationoftheworld’sbeston-premises......
  • 有关c++STL容器及头文件
    万能头打遍天下无敌手(除了vjudge)#include<bits/stdc++.h>通用函数(在以下STL容器中均适用)size返回容器的实际长度(元素个数)empty返回一个bool型,表示容器是非为空vector声明:vector<int>头文件:Here#include<vector>一些函数:clear清空迭代器与b......
  • 15.Petclinic搜索接口测试执行-postman
    因 https://spring-petclinic-rest.k8s.hogwarts.ceshiren.com/petclinic/api/owners?lastName=LASTNAME接口不在支持使用故事用下方接口进行接口测试一、通过抓包获取接口信息,分析入参及响应数据选中接口鼠标右键选择:保存har导入postman二、根据接口和开发产品确认入参......