配置STM32F103的高级定时器TIM1用于PWM功能

news/2024/9/29 19:54:45/

配置STM32F103的高级定时器TIM1用于PWM功能

之前在使用stm32f103的PA9引脚复用为高级定时器TIM1_CH2,用它来输出PWM波时发现无法正常输出PWM波形。出现这种问题的情况一般是将PA9先初始化成了串口,然后又配置成PWM功能,这样会导致无法输出PWM波形。需要在程序中关闭USART1的时钟后才能正常输出PWM波形。也即是GPIO在切换复用功能的时候,要关闭前一个复用功能的时钟。软件代码如下:
//PA9 -- TIM1_CH2的PWM功能初始化:
void TIM1_CH2_PWM_Init(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitTypeStructure;//打开端口时钟、复用功能时钟以及定时器外设时钟//==================================================================//这里需要关闭USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,DISABLE);//==================================================================RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); TIM_DeInit(TIM1);//设置该引脚为复用输出功能GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);    //使用部分映射//初始化TIM1TIM_TimeBaseStruct.TIM_Period = arr;//重装载值 TIM_TimeBaseStruct.TIM_Prescaler = psc;//预分频值 TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//初始化PWMTIM_OCInitTypeStruct.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitTypeStruct.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitTypeStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitTypeStruct.TIM_Pulse = 0;TIM_OC2Init(TIM1,&TIM_OCInitTypeStructure); //选择定时器输出通道 TIM1_CH2//使能预装载寄存器TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);//使能定时器TIM_Cmd(TIM1,ENABLE);TIM_CtrlPWMOutputs(TIM1,ENBALE);    //使用高级定时器时要加上控制输出PWM
} 

http://www.ppmy.cn/news/1532066.html

相关文章

Github 2024-09-23 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-09-23统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6C++项目3C项目3HTML项目2PowerShell项目1TypeScript项目1JavaScript项目1Blade项目1PHP项目1Bootstrap 5: Web上开发响应式、移动优…

百度智能体创建:情感领域的创新力量

《百度智能体:情感领域的创新力量》 一、百度智能体:开启智能新征程 百度智能体,准确叫法为百度文心智能体。它是由百度推出的基于文心大模型的智能体平台。2023 年 9 月 1 日,平台的前身 “灵境矩阵” 上线并开始内测&#xff0c…

高并发内存池(六):补充内容

目录 有关大于256KB内存的申请和释放处理方法 处理大于256KB的内存申请 补充内容1 补充内容2 补充内容3 处理大于256KB的内存释放 新增内容1 新增内容2 测试函数 使用定长内存池替代new 释放对象时不传对象大小 补充内容1 补充内容2 补充内容3 补充内容4 测试…

如何使用ssm实现个人日常事务管理系统+vue

TOC ssm718个人日常事务管理系统vue 研究背景 自计算机发展以来给人们的生活带来了改变。第一代计算机为1946年美国设计,最开始用于复杂的科学计算,占地面积、开机时间要求都非常高,经过数十几的改变计算机技术才发展到今天。现如今已是电…

服务保护sentinel

线程隔离 - 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果。 - 信号量隔离:不创建线程池,而是计数器模式,记录业务使用的线程数量,达到信号量上限时,禁止新的请求。…

在Android开发中可以用到的Ui控件有哪些?

目录 1. 文本控件 2. 按钮控件 3. 选择控件 4. 布局控件 5. 图像控件 6. 列表控件 7. 对话框和提示 8. 菜单控件 9. 工具栏和导航控件 10. 进度控件 11. 时间与日期控件 12. 其他控件 13. 高级控件 14. 自定义控件 15. 其他 总结: 在 Android 开发中…

Go基础学习06-Golang标准库container/list(双向链表)深入讲解;延迟初始化技术;Element;List;Ring

基础介绍 单向链表中的每个节点包含数据和指向下一个节点的指针。其特点是每个节点只知道下一个节点的位置,使得数据只能单向遍历。 示意图如下: 双向链表中的每个节点都包含指向前一个节点和后一个节点的指针。这使得在双向链表中可以从前向后或从后…

下载分享抖音视频并转成文本

思路 将分享的链接转义成可以正常链接。通过链接去找到对应的视频链接。在通过返回的html。解析里面视频的资源链接在playAddr字段里面。拿到链接后转义urlPath即可获取到资源信息。下载视频。科大讯飞语音转文本。处理json保存到本地。 部分代码 获取抖音链接: …