12.3(时钟树+pwn输出方波)

本文介绍了如何在嵌入式系统中配置时钟树,如选择内部时钟和外部时钟,以及使用TIM4实现计数器功能并通过USART2进行串口DMA通信。同时详细讲解了如何配置PWM,以TIM1为例,包括频率设定和使用Keil编写生成PWM信号的代码。作者还提到后续将用示波器验证PWM输出。
摘要由CSDN通过智能技术生成

时钟树最主要的就是中间的总频率,左边可以分为内部时钟与外部时钟,右边是各种元件,就是下图的APB1和APB2和其他的元件

一般选用高速外部时钟,频率调成最大,然后让他自己配置。

下面展示一段使用时钟的具体例子:

这里我选用内部时钟,最大频率64MHz。

选基础的TIM4。

配置时钟:

Prescaler:预分频系数,想让频率除以多少就设置多少减一

Counter Mode:向上计数还是向下计数

Counter Period:自动重装载数,设置多少减一就是计数器计到多少就重新计数,最大是65532(8字节)

然后使用USART2串口DMA传输数据,这样占CPU内存少。

生成代码:

先用HAL_TIM_Bast_Start()启动时钟,

定义变量ca(count)与数组me(message)

/* USER CODE BEGIN WHILE */
  while (1)
  {
		ca = __HAL_TIM_GET_COUNTER(&htim4);
		sprintf(me,"counter:%d\r\n",ca);
		HAL_UART_Transmit_DMA(&huart2,(uint8_t *)me,strlen(me));
		HAL_Delay(99);
}
    /* USER CODE END WHILE */

while循环里,

__HAL_TIM_GET_COUNTER(&htim4);读取计数器里面的数字;

sprintf打印出来变成数组(#include <stdio.h>)

HAL_UART_Transmit_DMA(&huart2,(uint8_t *)me,strlen(me));将打印出来的数组通过DMA传到电脑。

这里由于不知道数组长度多少,所以用strlen计算数组长度(#include <string.h>)

HAL_Delay(99);隔99+1毫秒

所以整个数据会每隔100ms向电脑发送计数器里面的数据。

通过串口助手看到,发出来的数据是每隔1000发送一次。

算一下:总频率64000000Hz,分频器我设置的是6400-1,所以是

640000000➗6400=10000

一万Hz,一秒数10000个数字,然后自动重装载数设置9999,所以数到10000就归零。

HAL_Delay设置的是100ms发送一次数据,也就是0.1s

因此串口助手上每隔1000发送一次没毛病。

PWM生成主要靠的是TIM_CH口,分1,2,3,4。1是高级,23是一般,4是基础。

设置高速外部时钟,时钟树总频率设置为72MHz,

这里我先配置TIM1时钟:

配置PWN:

  • Mode :PWM模式1
  • Pulse(占空比值) :50(50%)
  • Fast Mode PWM脉冲快速模式(没啥用) :不使能
  • PWM 极性(有效电平): 设置为高电平

而PWM的频率则是总频率➗(分频器✖自动重装载数)

也就是72000000➗(72✖100)=10000

打开keil,

写一段输出PWM:

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

开启定时器1,通道1输出PWM。

改天去实验室用示波器演示方波。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值