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_CLKSOURCE_HCLK);
//SysTick ??? HCLK
fac_us=SYSCLK; //?????? OS,fac_us ????? #if SYSTEM_SUPPORT_OS //?????? OS.
reload=SYSCLK; //???????? ??? K
reload*=/delay_ostickspersec; //?? delay_ostickspersec ??????
//reload ? 24 ????,???:16777216,? 180M ?,?? 0.745s ??
fac_ms=/delay_ostickspersec; //?? OS ?????????
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;//?? SYSTICK ??
SysTick->LOAD=reload; //? 1/OS_TICKS_PER_SEC ?????
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //?? SYSTICK
#else
#endif
} void delay_us(u32 nus)
{
u32 ticks;
u32 told,tnow,tcnt=;
u32 reload=SysTick->LOAD; //LOAD ??
ticks=nus*fac_us; //??????
told=SysTick->VAL; //?????????
while()
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow<told)tcnt+=told-tnow;//???? SYSTICK ??????????.
else tcnt+=reload-tnow+told;
told=tnow;
if(tcnt>=ticks)break; //????/????????,???.
}
};
}
/* USER CODE END 0 */
int main(void)
{ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* Configure the system clock */
SystemClock_Config(); /* Initialize all configured peripherals */
MX_GPIO_Init(); /* USER CODE BEGIN 2 */
delay_init();
/* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while ()
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET);
delay_us();
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_RESET);
delay_us();
/* USER CODE BEGIN 3 */ }
/* USER CODE END 3 */ }
实际测试, 函数调用能带来几百ns的误差.
stm32 cubemx hal 工程中 微秒延迟 delay_us的更多相关文章
- STM32的HAL库中的DMA_FLAG_TCIF3_7等几个宏定义的含义
DMA_FLAG_TCIF0_4就是指DMA的通道0和通道4,DMA_FLAG_TCIF1_5就是指DMA的通道1和通道5,DMA_FLAG_TCIF2_6就是指DMA的通道2和通道6,DMA_FLA ...
- stm32 cubemx hal dma uart参考例程,发送和接收
参考:https://blog.csdn.net/toopoo/article/details/80012317https://blog.csdn.net/morixinguan/article/de ...
- STM32 之 HAL库(固件库) _
1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...
- STM32 之 HAL库(固件库)
1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...
- STM32 CubeMx使用教程
一.STM32CubeMX 简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以 ...
- STM32基于HAL库通过DMA读写SDIO
通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或 ...
- ARC简介以及工程中ARC与非ARC的混合
Piosa 博客园 博问 闪存 首页 新随笔 联系 管理 订阅 随笔- 79 文章- 0 评论- 13 ARC简介以及工程中ARC与非ARC的混合 ARC与非ARC在一个项目中同时使用, ...
- (2)STM32使用HAL库操作外部中断——理论讲解
1.中断触发过程 对主程序压栈--把中断服务函数的地址写入到程序计数器(PC)--执行中断服务函数 2.中断向量表 中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分): 如上表所示, ...
- 如何使用keil5将stm32的hal库编译成lib文件——F1版本
hal库中keil5中编译的速度是比较慢的,相同情况下,每次都要编译的时候,比标准库是要慢很多的,因此就hal库编译成lib文件是一种加快编译速度的方法,当然也有其自身的缺点.一.步骤1.使用cube ...
随机推荐
- PyInstaller打包步骤简记
pyinstaller 下载地址:http://www.pyinstaller.org/ 下载后用cmd进入解压文件夹 python setup.py install 安装. 最近用pyinstall ...
- [翻译]类型双关不好玩:C中使用指针重新解释是坏的
原文地址 Type punning isn't funny: Using pointers to recast in C is bad. C语言中一个重新解释(reinterpret)数据类型的技巧有 ...
- ESXi 5.5开启并配置SNMP
1. 安装vshpere cli 2.设定SNMP通讯字并开启SNMP功能 进入到bin目录. C:\Program Files (x86)\VMware\VMware vSphere CLI\bin ...
- C++ 一次创建多级目录
#ifdef WIN32 #include <io.h> #include <direct.h> #else #include <unistd.h> #includ ...
- sys.stdout.write与sys.sterr.write(三)
目标: 1.使用sys.stdout.write模拟"|"的顺时针变化- \ | / 2.使用sys.stderr.write模拟"|"的顺时针变化- \ | ...
- nvm诡异的报错
安装:curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash wget -qO- htt ...
- jquery+ajax实现分页
var curPage = 1; //当前页码 var total,pageSize,totalPage; //总记录数,每页显示数,总页数 getData(1); $("#pagecoun ...
- C++笔记(二)------ 头文件
类似#include<string>与#include<string.h>等头文件的区别 标准的C++头文件没有.h扩展名,带有.h的头文件一般都是C语言的.例如#includ ...
- 用js计算从开始到结束时间之内的按周值选定
前台选择周几(周一周日),比如选择<td>周一</td>,<td>周三</td>,<td>周五</td>我用js attr 给t ...
- NDK开发—基础知识实战Demo
简介 前面写了几篇NDK相关的文章: NDK开发-简介&环境搭建(Eclipse,Android Studio) NDK开发-Android Studio+gradle-experimenta ...