函数通过HAL_GetTick()获取计数值,计数值1ms加1,直到加到你写入的值,跳出最后的while循环,程序结束。 uwTickFreq这个值是为1的,也就是说会多延时1ms,这样做是为了防止用户写入延时0ms这种无意义的延时。 注意:这个函数是有中断的,不要把这个函数放到自己的中断回调函数里,如果SysTick定时器中断的优先级小于你使用...
1堵塞式延时 用这种程序会一直等待不能做其它工作,优点是实现简单,适用于断时的单任务等待。 HAL_Delay(1000); //延时1000ms 2 非堵塞式等待 借用系统的开机时间,可以边等待边完成其它任务,不占用CPU,比较推荐这种方式。 需要用到函数 HAL_GetTick() 1uint32_t startTime,now;23startTime=HAL_GetTick();45w...
之前也遇到过这个问题后来把HAL_Delay 去掉了. 然后发现不行, 还是得有它.不然发串口数据发的太快会乱掉. 得慢点发. 然后调试到HAL_Delay()方法的内部发现 HAL_GetTick( )函数一直返回 __weak void HAL_Delay(uint32_t Delay) { uint32_t tickstart = HAL_GetTick(); uint32_t wait = Delay; /* A...
2019-12-12 20:18 −之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题。发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。 根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为 __weak uint32_t HAL_GetTick(v... ...
minimum wait */if(wait<HAL_MAX_DELAY){wait+=(uint32_t)(uwTickFreq);}while((HAL_GetTick()...
void LED2_Blink(void)//实现在0-499ms内LED2亮起,500-999msLED2熄灭,0.5s转换状态 { uint32_t currentTime = HAL_GetTick();//获取当前时间的ms数 if(currentTime - last_time >= 1)//判断是否过去了1ms { software_tick_counter++; last_time=currentTime; ...
STM32 HAL库开发入门指南注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设(中断、I2C、USART、SPI等配置)在STM32CubeMX中的设置为主,对驱动代码编写不做记录,所以阅读本文最好有标准库开发经验。除第2节外,使用的都是韦东山老师的瑞士军刀系列。
HAL库不像之前的标准库,在系统启动函数SystemInit里面做了RCC初始化,HAL库是没有做的,所以进入到main函数后,系统还在用内部高速时钟HSI,对于H7来说,HSI主频是64MHz。 函数HAL_Init里面调用的HAL_MspInit一般在文件stm32h7xx_hal_msp.c里面做具体实现,主要用于底层初始化。当前此函数也在文件stm32h7xx_hal.c里面...
1. 标准外设库STD(Standard Peripheral Libraries)标准外设库,它把实现功能中需要配置的寄存器以结构体的形式封装起来,使用者只需要配置结构体变量成员就可以修改外设的配置寄存器,比直接操作寄存器方便了不少。但标准外设库仍然接近于寄存器操作,它的方便也是针对某一系列芯片而言的,在不同系列芯片上使用标准外设库开发...
HAL_USART_STATE_BUSY_RX;/* Init tickstart for timeout management */tickstart=HAL_GetTick();husart->RxXferSize=Size;husart->RxXferCount=Size;/* Check the remain data to be received */while(husart->RxXferCount>0U){husart->RxXferCount--;if(husart->Init.WordLength==USART_WORDLENGTH_...