IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32复习笔记(十八) —— 高级定时器(输出比较) -> 正文阅读

[嵌入式]STM32复习笔记(十八) —— 高级定时器(输出比较)

STM32复习笔记(十八) —— 高级定时器(输出比较)

1.配置步骤

1)选择计数器时钟 (内部,外部,预分频器)
2)将相应的数据写入TIMx_ARR and TIMx_CCRx寄存器中
3)可设置中断,TIMx_DIER
4)选择输出模式,TIMx_CCMRx and TIMx_CCER
5)启动计数器,TIMx_CR1

2.本例程软件设计思路

使用 TIM1 输出比较,从 TIM1_CH1 通道输出占空比为30% PWM 波

3.代码编写

于 main.c 中编写代码

#include "stm32f10x.h"
#include "dr_usart.h"

void TIM1_CH1_GPIO_Config(void)
{
	/* 开启 GPIOA 时钟, TIM1_CH1 对应IO口为 PA8 */
	RCC->APB2ENR |= ((uint16_t)0x01 << 2);
	
	/* 开启 AFIO 时钟 */
	RCC->APB2ENR |= ((uint16_t)0x01 << 0);
	
	/* 配置 PA8 为复用推挽输出,10MHz */
	GPIOA->CRH &= ~((uint32_t)0x0F << 0);
	GPIOA->CRH |=  ((uint32_t)0x09 << 0);
	
	/* 复用 PA8 到 TIM1 */
	AFIO->MAPR &= ~((uint32_t)0x03 << 6);
	AFIO->MAPR |=  ((uint32_t)0x01 << 6);
}

void TIM1_Config(void)
{
	/* 开启 TIM1 时钟,挂载于 APB2 总线 */
	RCC->APB2ENR |= ((uint32_t)0x01 << 11);
	
	/* 向上计数 */
	TIM1->CR1 &= ~((uint16_t)0x07 << 4);
	
	/* 时钟分频因子 */
	TIM1->CR1 &= ~((uint16_t)0x03 << 8);
	
	/* 重装载值 9999+1 */
	TIM1->ARR = ((uint16_t)9999);
	
	/* 预分频器值 71+1 */
	TIM1->PSC = ((uint16_t)71);
	
	/* 重复计数器值 0 */
	TIM1->RCR = ((uint16_t)0);
	
	/* --------- --------- --------- --------- --------- --------- --------- - */
	
	/* 清除 CC1E,禁止输出 */
	TIM1->CCER &= ~((uint16_t)0x01 << 0);
	
	/* 清除 CCMR1 输出模式配置 */
	TIM1->CCMR1 &= ~((uint16_t)0xFF << 0);
	
	/* PWM 模式1 */
	TIM1->CCMR1 |= ((uint16_t)0x06 << 4);
	
	/* 输出高电平有效 */
	TIM1->CCER &= ~((uint16_t)0x01 << 1);
	
	/* 输出使能 */
	TIM1->CCER |= ((uint16_t)0x01 << 0);
	
	/* 输出比较寄存器值 3000 */
	TIM1->CCR1 = ((uint16_t)3000);
	
	/* 主输出使能 */
	TIM1->BDTR |= ((uint16_t)0x01 << 15);
	
	/* 开始计数 */
	TIM1->CR1 |= ((uint16_t)0x01 << 0);
}

int main(void)
{
	/* --------- (81 = 30 + 51) --------- --------- --------- --------- ------ */
	
	User_Init(); /* 中断优先级分组 (16级抢占优先级) and 配置串口1打印调试信息 */
	
	delay_(1);   /* 粗略延时 (约为ms级), 置于此处, 便于使用时复制调用 */
	
	/* --------- 换行基准 --------- --------- --------- --------- --------- -- */
	
	/* 配置 GPIOA GPIO_Pin_8 */
	TIM1_CH1_GPIO_Config();

	/* 配置 TIM1 */
	TIM1_Config();
	
	while(1);
}

点击编译,如无错误可进入仿真界面
SSS018.001
打开逻辑分析仪 (添加 PA8)
SSS018.002
SSS018.003
点击运行
SSS018.004
经验证,程序运行结果与预想一致

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:40:09  更:2021-10-25 12:40:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:45:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码