STM32 CubeMX如何生成微秒(us)级延时

会自动在tim.c里面生成代码,如下:

/* Includes ------------------------------------------------------------------*/
#include "tim.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

TIM_HandleTypeDef htim17;

/* TIM17 init function */
void MX_TIM17_Init(void)
{

htim17.Instance = TIM17;
htim17.Init.Prescaler = 0;
htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
htim17.Init.Period = 65535;
htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim17.Init.RepetitionCounter = 0;
if (HAL_TIM_Base_Init(&htim17) != HAL_OK)
{
Error_Handler();
}

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

if(tim_baseHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspInit 0 */

/* USER CODE END TIM17_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM17_CLK_ENABLE();
/* USER CODE BEGIN TIM17_MspInit 1 */

/* USER CODE END TIM17_MspInit 1 */
}
}

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{

if(tim_baseHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspDeInit 0 */

/* USER CODE END TIM17_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM17_CLK_DISABLE();
}
/* USER CODE BEGIN TIM17_MspDeInit 1 */

/* USER CODE END TIM17_MspDeInit 1 */
}

然后自己再写一个函数;

/* USER CODE BEGIN 4 */

void Delay_us(uint16_t nus)
{
__HAL_TIM_SetCounter(&htim17, 0);//htim17

__HAL_TIM_ENABLE(&htim17);

while(__HAL_TIM_GetCounter(&htim17) < (36 * nus));//36是系统时钟,更改这里就行了。
/* Disable the Peripheral */
__HAL_TIM_DISABLE(&htim17);
}

/* USER CODE END 4 */

因为36 * 1/36M 对应的就是1us,用定时器来做延时是很准的。

时间: 2024-11-06 23:04:03

STM32 CubeMX如何生成微秒(us)级延时的相关文章

windows下基于(QPC)实现的微秒级延时

1.为什么会写windows下微秒级延时 在上一篇 实现memcpy()函数及过程总结 中测试memcpy的效率中,测试时间的拷贝效率在微秒级别,需要使用微秒级时间间隔计数. windows下提供QueryPerformanceCounter(查询高性能计数器),QPC是基于硬件计数器,获取高分辨率时间戳. 参考:Acquiring high-resolution time stamps 应用形式: 1 LARGE_INTEGER start, end; 2 LARGE_INTEGER Freq

python递归练习:生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级

结果#encoding = utf-8#题目:#生成一个n级深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},写一个函数定义n级a=[1,2,3,4,5,6] def fun(n,i=0,dict1={}): if i ==n-1: dict1[a[i]] = a[i+1:] if i < n-1: dict1[a[i]] = fun(n,i+1,dict1={}) #print "dict1:",dict1 return

STM32 CubeMX 学习:001-GPIO的使用

背景 在上一讲STM32 CubeMX 学习:搭建开发环境中,我们已经利用CubeMx搭建了可编译的工程. 今天就开始来介绍STM32 GPIO的有关知识,以及如何驱动它. HOST-OS : Windows-10 STM32 Cube :v5.6 MCU : STM32F429 LIB : stm32cube_fw_f4_v1250 知识 在STM32中,GPIO有这些属性:输入.输出.复用功能:也可以设置速度,上下拉,推挽开漏等电器特性. 在Drivers/STM32F4xx_HAL_Dri

基于STM32F030F4P9和STM32 CUBEMX 输出PWM波形

STM32F030F4P9定时器功能比较丰富,在此记录项目中使用其自动输出PWM波形(频率:50HZ).CubeMX配置定时器如下图说明. 在此定时器基础时钟为48MHZ,配置中不做分频处理,预分频系数为48,定时器计数器寄存器为20000,可求得周期为: T = ( ( 1 / (48Mhz / 48) ) * 20000) = 20ms 在PWM输出配置选项中,改变Pulse可改变PWM的占空比.CH Polarity配置当计数器中的值小于Pulse时,输出高电平, CH Idle Stat

stm32 cubemx hal 工程中 微秒延迟 delay_us

参考的正点原子的代码 测试平台 stm32f429i-disco 配了一个gpio 时钟 gpio /* USER CODE BEGIN 0 */ typedef uint8_t u8; typedef uint32_t u32; u8 fac_us; void delay_init(u8 SYSCLK) { #if SYSTEM_SUPPORT_OS //?????? OS. u32 reload; #endif HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKS

STM32代码自动生成工具使用说明

1.什么是"代码自动生成工具" 为了降低开发者的开发门槛,缩短开发周期,降低开发资源投入,机智云推出了代码自动生成服务.云端会根据产品定义的数据点生成对应产品的设备端代码. 自动生成的代码实现了机智云通信协议的解析与封包.传感器数据与通信数据的转换逻辑,并封装成了简单的API,且提供了多种平台的实例代码.当设备收到云端或APP端的数据后,程序会将数据转换成对应的事件并通知到应用层,开发者只需要在对应的事件处理逻辑中添加传感器的控制函数,就可以完成产品的开发. 使用自动生成的代码开发产品

STM32 Cubemx Printf重定向

1.对于版本比较低的STM32CubeMX(比如V4.25.0),生成的工程缺少syscall.c文件.将syscall.c文件复制到startup目录下,而新版本的STM32CubeMX(V5.6.0)会自动生成syscall.c文件,在Src文件夹下. 2.添加必须要的代码段: 1 /* Private function prototypes -----------------------------------------------*/ 2 void SystemClock_Config

STM32使用cube生成的程序后在keil5编译后首次SWD可以下载再次下载不行的解决办法。

使用cube配置导出工程在keil5编译后首次SWD下载可以再次下载不行的解决办法. 1原因: cube使用的是HAL库,初始化语句里面禁用了调试功能. 在stm32f1xx_hal_msp.c中 __HAL_AFIO_REMAP_SWJ_DISABLE();  就是这句禁了. 2解决: 在stm32f1xx_hal_msp.c中改为 __HAL_AFIO_REMAP_SWJ_ENABLE();    这句启用调试功能. 下载办法:按住开发板的复位按钮(一直到点击下载)后松开,就可以下载成功.

STM32 CubeMX 中如何查看系统时钟

uint32_t sysclock = 0; sysclock = HAL_RCC_GetSysClockFreq(); 这样就可以在线仿真时看sysclock了,这些函数都在rcc这个库里面,还可以查看时钟树上其他总线上的时钟.