3.1 用中断的方式实现delay延时 3.2 用查询方法实现delay延时 3.2.1 延时初始化函数 关于延时因子fac_us和fac_ms,如果是选择HCLK8分频,即168M/8=21M,延时1us/ms要多少SysTick的时钟周期 fas_us = 21;fas_ms=21000 AI检测代码解析 static u8 fac_us=0; //us延时倍...
#include"stm32f4xx.h"// Device header#include"led.h"#include"delay.h"#include"key.h"#include"usart.h"#include"sys.h"#include"exti.h"#include"timer.h"intmain(void){LED_Init();KEY_Init();USART1_Init(84,115200);KEY_EXTI_Init();/* 1/84000000得到定时器加的1的时间单位us 1/84000...
1//模拟串口延时函数 波特率为115200 所以延时8.68us23voidVuart_delay_us(void)45{67u16 i =0;89u32 temp;1011SysTick->LOAD=8*fac_us;//时间加载1213SysTick->VAL=0x00;//清空计数器1415SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;//开始倒数1617do1819{2021temp=SysTick->CTRL;2223}while((temp&0...
之间,否则下次在Cube中有所更改,再重新生成文件,不在规定区域的代码会消失 1voiddelay_us(uint16_t us)2{3uint16_t differ=0xffff-us-5;456HAL_TIM_Base_Start(&htim7);7__HAL_TIM_SetCounter(&htim7,differ);8while(differ <0xffff-5)9{10differ = __HAL_TIM_GetCounter(&htim7);11}12HAL_...
delay_us(10); //10us 延时,防止-O2 优化出问题 __HAL_DMA_ENABLE_IT(&I2S2_RXDMA_Handler,DMA_IT_TC); //开启传输完成中断 __HAL_DMA_CLEAR_FLAG(&I2S2_RXDMA_Handler,DMA_FLAG_TCIF3_7); //清除 DMA 传输完成中断标志位 HAL_NVIC_SetPriority(DMA1_Stream3_IRQn,0,1); //抢占 1,子优先级...
按位取反在设置寄存器的时候经常被使用,常用于清除某一个/某几个位。下面是delay_us函数的一行代码: SysTick->CTRL &= ~(1 << 0) ; /* 关闭SYSTICK */ 该代码可以解读为仅设置CTRL寄存器的第0位(最低位)为0,其他位的值保持不变。同样我们也不使用按位取反,将代码写成: ...
delay_us(30); GPIO_ResetBits(GPIOF,GPIO_Pin_6); while((!GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_5))&&TIM2_Flag==0); TIM2->CNT=0; while(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_5)&&TIM2_Flag==0); TIM_Cmd(TIM2,DISABLE); if(TIM2_Flag==1) ...
Delay.c延时函数代码 登录后复制#include "delay.h" /* 功能:毫秒级别的延时函数 参数:填入延时的时间 返回值:无 说明:频率在168MHZ情况下使用 */ void DelayMs(u32 time) { u32 a,b,c; for(a=0;a;a++)> 登录后复制Led.c代码 登录后复制登录后复制#include "led.h" ...
void DelayUs(u32 time) { u32 stat; SysTick->LOAD=18.750*time; //重装载寄存器,最大24位,最大值:16777215 SysTick->VAL=0; //清除CNT计数值 SysTick->CTRL|=1<<0; //SysTick 定时器的使能位 do { stat=SysTick->CTRL; //获取状态位 ...
static u8 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数,在os下,代表每个节拍的ms数//初始化延时函数,一个就是时钟源的选择,另一个就是将两个延时因子确定下来void delay_init(u8 SYSCLK){#if SYSTEM_SUPPORT_OS //如果需要支持OS.u32 reload;#endifSysTick_CLKSourceConfig(SysTick...