历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2019年08月22日 | STM32 PWM输出(映射)

2019-08-22 来源:eefocus

STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!


要使 STM32 的通用定时器 TIMx 产生 PWM 输出,分别需要用到3个寄存器:捕获 /比较模式寄存器
(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。 

这几个寄存器在《stm32中文参考手册》288页到293页有

1) 开启 TIM3 时钟以及复用功能时钟,配置 PB5 为复用输出。 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器 3 时钟 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用时钟使能 

 

2) 设置 TIM3_CH2 重映射到 PB5 上。 

 

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //端口PB5

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHZ
GPIO_Init(GPIOB, &GPIO_InitStructure); //①初始化 GPIO 

3) 初始化 TIM3,设置 TIM3 的 ARR 和 PSC 。

TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx 的 

 

4) 设置 TIM3_CH2 的 PWM 模式,使能 TIM3 的 CH2 输出。 

void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); 

 

TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2 ; 模式1是输出比较
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高;还有一个是输出极性低
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2

 

 

//TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能预装载寄存器 

 

5) 使能 TIM3。 
TIM_Cmd(TIM3, ENABLE); //使能 TIM3 
6) 修改 TIM3_CCR2 来控制占空比。 
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); 

 

知识来源:STM32F1开发指南-库函数版本_V3.1 


推荐阅读

史海拾趣

FLEX LTD公司的发展小趣事

Flex Ltd.(伟创力国际有限公司),作为全球知名的电子制造服务(EMS)供应商,自1969年在美国硅谷成立以来,经历了多个关键的发展阶段和故事。以下是五个与其发展紧密相关的事实性故事:

1. 全球布局的开端:新加坡建厂

1981年,Flex Ltd.在新加坡建立了其第一个海外工厂,这一举措标志着公司正式走出美国,开启了全球化布局的序幕。新加坡工厂的建立不仅为Flex带来了更低的制造成本,还使其能够更贴近亚洲市场,为客户提供更快捷的服务。这一战略性的地理选择为Flex后续在全球范围内的扩张奠定了坚实基础。

2. 纳入纳斯达克上市

随着业务的不断扩展和实力的增强,Flex Ltd.于某年成功在纳斯达克(NASDAQ)上市。这一里程碑事件不仅为公司筹集了更多的发展资金,还极大地提升了其在国际市场上的知名度和影响力。上市后的Flex更加注重财务透明度和公司治理,为股东创造了长期价值。

3. 与华为的合作与风波

Flex与华为的合作曾是业内的佳话。特别是在2018年,Flex承接了华为价值高达25亿美元的代工订单,这一合作极大地推动了Flex的业务增长。然而,随着2019年美国商务部将华为列入“实体清单”,Flex被迫在全球范围内停止与华为的合作,并扣押了华为的物资和设备。这一事件引发了广泛争议,对Flex的声誉和客户关系造成了一定影响。尽管后续双方进行了多轮谈判,但这一风波仍成为了Flex发展历程中一个不可忽视的章节。

4. 供应链的数字化转型

Flex一直致力于通过数字化转型来提高供应链的效率和透明度。公司发起了一项全球计划,旨在通过EDI(电子数据交换)等先进技术实现采购及付款交易的完全自动化。这一举措不仅降低了成本、减少了错误,还提高了供应链的响应能力和可见性。例如,Flex与D公司的EDI项目合作就是其数字化转型的一个成功案例,展示了Flex在推动供应链自动化方面的决心和实力。

5. 环保与社会责任

Flex在快速发展的同时,也积极履行其环保和社会责任。公司遵循欧盟的RoHS和WEEE等环保指令,致力于在电子产品设计和制造过程中减少有害物质的使用,并推动电子废弃物的回收和处理。此外,Flex还通过专项拨款、财务捐助、自愿者行动等多种形式加大对全球社会的支援和投入力度,关注灾难赈济、医疗援助、教育、环保等领域。这些举措不仅提升了Flex的企业形象,也为其可持续发展奠定了坚实的基础。

Fenfa Electronics Ltd公司的发展小趣事

在技术创新的基础上,Fenfa Electronics Ltd公司开始积极拓展市场。公司高层意识到,仅仅依靠单一市场是远远不够的。因此,Fenfa团队制定了全球市场拓展战略,逐步打开了欧美、亚洲等地区的市场。在拓展过程中,公司积极与当地企业合作,深入了解当地市场需求和消费者习惯,不断优化产品和服务。通过这一系列的市场拓展策略,Fenfa Electronics Ltd公司的品牌知名度和市场份额均得到了显著提升。

Hirose Electric公司的发展小趣事

在技术创新的基础上,Fenfa Electronics Ltd公司开始积极拓展市场。公司高层意识到,仅仅依靠单一市场是远远不够的。因此,Fenfa团队制定了全球市场拓展战略,逐步打开了欧美、亚洲等地区的市场。在拓展过程中,公司积极与当地企业合作,深入了解当地市场需求和消费者习惯,不断优化产品和服务。通过这一系列的市场拓展策略,Fenfa Electronics Ltd公司的品牌知名度和市场份额均得到了显著提升。

GC Electronics公司的发展小趣事
定期清洁传感器和冷却系统,防止污垢或杂质影响传感器的正常工作。
DDK公司的发展小趣事

DDK公司在发展过程中,始终牢记社会责任,积极履行企业公民的义务。公司积极参与公益事业,关注环境保护和社会发展,为社会做出了积极贡献。同时,DDK公司还积极推动行业健康发展,与同行企业共同维护市场秩序和公平竞争环境。这种社会责任的担当,让DDK公司在电子行业中树立了良好的企业形象。

GSR Technology Ltd公司的发展小趣事

在快速发展的同时,GSR Technology Ltd始终关注可持续发展和社会责任。公司积极推动绿色生产,采用环保材料和工艺,减少对环境的影响。同时,公司积极参与公益事业,为贫困地区提供技术支持和教育援助。此外,公司还加强知识产权保护,维护行业健康发展。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示一个类似公司在电子行业中的可能发展路径。实际情况可能因公司具体策略、市场环境等因素而有所不同。

问答坊 | AI 解惑

分享一个电工初级:电容放电

电解电容在电路板掉电了电容还是有300V电压。 用你的坏表笔中间串接一个30K的电阻,修板子时先把大电容的电放了就可以了,不然就会有 你的教训。没大电容的话直接用手放也不错。 电容容量大了放电慢 有些电路的放电电阻很大,电解电容放电需几 ...…

查看全部问答>

PXA270BSP backlight驱动问题

重新看一遍backlight背光驱动 发现几个问题请教各位: 1、pBKLinfo->hCoreDll = LoadLibrary(TEXT(\"coredll.dll\"));        if (NULL != pBKLinfo->hCoreDll)         {       &n ...…

查看全部问答>

WINCE播放视频不流畅?

播放视频画面会卡,声音不会卡,不知道是怎么回事,是不是WINCE的哪个组件没加进去?…

查看全部问答>

求430按键中断扫描程序

中断,4*4的!求教!…

查看全部问答>

请教关于文件系统的dosFsVolFormat函数

我根据下述步骤创建ram文件系统:     char *ramDiskDevName = \"/ram0\" ;     CBIO_DEV_ID cbio ;       cbio = ramDiskDevCreate((unsigned char *)RAM_DISK_ADDRESS, 128, 1024* ...…

查看全部问答>

水管捡漏问题

现在做一个东西,叫网络化水管捡漏系统,但是捡漏部分不知怎么办好,超声波流量计可能做不来,有没有水压传感器之类的,或者有更好的方法,请指导一下…

查看全部问答>

求助!mini2440开发板的串口接收问题

我用mini2440的串口FIFO模式, 从电脑上的SSCOM32发来txt文件, 开发板上接收, 为什么最多只能收到255个字节, 一旦超过256就收不到了?但是如果发225k的bmp图片, 可以正常接收, 解析后可以显示。请高手解答啊。…

查看全部问答>

EDIT控件数据光标选中数字反向

EDIT控件数据光标选中数字反向 后 改变当前数字(ucgui界面 EDIT数据光标选中数字反向 后 改变当前数字,如 1234.56中3 选中及反向显示。同时通过控制键,修改此(3)值 ,其范围(0~9)修改,在ucos+ucgui3.9怎么修改???…

查看全部问答>

请教一下TI例子中的滤波器代码

static const int coeffslp[9] = {      5225, 5175, 7255, 9453, 11595, 13507, 15016, 15983, 16315 }; // Highpass FIR filter coefficients for 17 taps to filter < 2Hz static const int coeffshp[9] = {   &nb ...…

查看全部问答>