asssdz-382474 发表于 2016-5-12 00:22:33

我去试一下

jtc_88 发表于 2016-5-12 08:22:20

本帖最后由 jtc_88 于 2016-5-12 08:26 编辑

我使用的STM32F030R8 的程序 别的改一下 DS18B20试过没问题 可以达到效果,这个程序我后来移植了好几个项目,成熟度还是可以的,STM32的定时器多可以这么使用。
微秒级延时用函数
*/
void Delay_us(uint16_t nus)
{
      __HAL_TIM_SetCounter(&htim17, 0);//htim17 可以更改为任何一个 定时器

      __HAL_TIM_ENABLE(&htim17);      

      while(__HAL_TIM_GetCounter(&htim17) < (48 * nus));//48是系统时钟频率 更换不同的 系列单片机 只修改 48这个数据
         /* Disable the Peripheral */
      __HAL_TIM_DISABLE(&htim17);
}
《tim.c》
/**
******************************************************************************
* File Name          : TIM.c
* Description      : This file provides code for the configuration
*                      of the TIM instances.
******************************************************************************
*
* COPYRIGHT(c) 2016 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*   1. Redistributions of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
*   2. Redistributions in binary form must reproduce the above copyright notice,
*      this list of conditions and the following disclaimer in the documentation
*      and/or other materials provided with the distribution.
*   3. Neither the name of STMicroelectronics nor the names of its contributors
*      may be used to endorse or promote products derived from this software
*      without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/

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

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

TIM_HandleTypeDef htim14;
TIM_HandleTypeDef htim16;
TIM_HandleTypeDef htim17;

/* TIM14 init function */
void MX_TIM14_Init(void)
{

htim14.Instance = TIM14;
htim14.Init.Prescaler = 0;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
htim14.Init.Period = 65535;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV2;
HAL_TIM_Base_Init(&htim14);

}
/* TIM16 init function */
void MX_TIM16_Init(void)
{

htim16.Instance = TIM16;
htim16.Init.Prescaler = TIM16_PSC;
htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
htim16.Init.Period = 65535;
htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV2;
htim16.Init.RepetitionCounter = 0;
HAL_TIM_Base_Init(&htim16);

}
/* 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_DIV2;
htim17.Init.RepetitionCounter = 0;
HAL_TIM_Base_Init(&htim17);

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{

if(htim_base->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspInit 0 */

/* USER CODE END TIM14_MspInit 0 */
    /* Peripheral clock enable */
    __TIM14_CLK_ENABLE();
/* USER CODE BEGIN TIM14_MspInit 1 */

/* USER CODE END TIM14_MspInit 1 */
}
else if(htim_base->Instance==TIM16)
{
/* USER CODE BEGIN TIM16_MspInit 0 */

/* USER CODE END TIM16_MspInit 0 */
    /* Peripheral clock enable */
    __TIM16_CLK_ENABLE();
/* USER CODE BEGIN TIM16_MspInit 1 */

/* USER CODE END TIM16_MspInit 1 */
}
else if(htim_base->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspInit 0 */

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

/* USER CODE END TIM17_MspInit 1 */
}
}

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
{

if(htim_base->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspDeInit 0 */

/* USER CODE END TIM14_MspDeInit 0 */
    /* Peripheral clock disable */
    __TIM14_CLK_DISABLE();
/* USER CODE BEGIN TIM14_MspDeInit 1 */

/* USER CODE END TIM14_MspDeInit 1 */
}
else if(htim_base->Instance==TIM16)
{
/* USER CODE BEGIN TIM16_MspDeInit 0 */

/* USER CODE END TIM16_MspDeInit 0 */
    /* Peripheral clock disable */
    __TIM16_CLK_DISABLE();
/* USER CODE BEGIN TIM16_MspDeInit 1 */

/* USER CODE END TIM16_MspDeInit 1 */
}
else if(htim_base->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspDeInit 0 */

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

/* USER CODE END TIM17_MspDeInit 1 */
}
}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/**
* @}
*/

/**
* @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

烟花绽放 发表于 2016-5-12 09:17:01

jtc_88 发表于 2016-5-12 08:22
我使用的STM32F030R8 的程序 别的改一下 DS18B20试过没问题 可以达到效果,这个程序我后来移植了好几个项目 ...

感谢哦,,我研究一下,还真没有用过HAL库的定时器呢,,之前都是在用标准库的

烟花绽放 发表于 2016-5-12 11:12:11

jtc_88 发表于 2016-5-12 08:22
我使用的STM32F030R8 的程序 别的改一下 DS18B20试过没问题 可以达到效果,这个程序我后来移植了好几个项目 ...

你好,能不能麻烦你发一下完整的工程,这段代码不是太明白,。适应STM32CUBE生产的定时器工程也在看,但是和你发的这段代码不太相同

david2016 发表于 2016-5-12 17:37:43

是不是写IIC的那个孩子?nop啊

烟花绽放 发表于 2016-5-13 09:26:02

david2016 发表于 2016-5-12 17:37
是不是写IIC的那个孩子?nop啊

i不是,我是在写DHT11:L

david2016 发表于 2016-5-13 11:17:14

烟花绽放 发表于 2016-5-13 09:26
i不是,我是在写DHT11

DHT11不就是用的IIC么,。你不是CUBE群里问us延时问题的那个孩子?

烟花绽放 发表于 2016-5-13 13:02:11

david2016 发表于 2016-5-13 11:17
DHT11不就是用的IIC么,。你不是CUBE群里问us延时问题的那个孩子?

汗,DHT11不是IIC驱动的,是单总线的,,,我没有在群里问us级延时,只在这边论坛发的帖子

david2016 发表于 2016-5-13 18:41:34

烟花绽放 发表于 2016-5-13 13:02
汗,DHT11不是IIC驱动的,是单总线的,,,我没有在群里问us级延时,只在这边论坛发的帖子
...

好吧,我记错了。 SHT21 是用的IIC。。。

haifeng-388081 发表于 2016-8-2 15:28:18

楼主你好,你的这个us级延时有没有写好啊,能不能给我发下这个代码,我现在也在写DH11,到了这个延时也不会了,谢谢了!我的邮箱294097034@qq.com.
页: 1 [2] 3
查看完整版本: 使用STM32CUBE生成STM32L073的工程,如何实现us级延时?