平时的HAL_Delay()都是毫秒单位的,但是进去这个函数看看的话,也看不出来是咋回事,我也不理解。但是就说在网上知道了一个方法:用SysTick_Config();这个函数就是来控制Delay函数的单位1代表计数器计数多少次。比如SysTick_Config(80);80000000/1000=1000000,所以Delay里面为1000000才代表是1s,也就是Delay(1)为1微秒。同理可知,如SysTick_Config(80000)时,Delay(1)为1ms。
但是这样不好,因为好多地方用到了Delay,这样改动比较大,可以在网上用现成的Delay_us();
void delay_us(u32 nus) { u32 temp; SysTick->LOAD=nus*fac_us-9; //时间加载 SysTick->VAL=0x00; //清空计数器 SysTick->CTRL=0x01 ; //开始倒数 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达 SysTick->CTRL=0x00; //关闭计数器 SysTick->VAL =0X00; //清空计数器 } |
蓝桥杯有点卡在计时器原理和中断上,没有找到很好的教程,也懒散了,光想着玩,一会(不一定)再看看。
今天还用esp32cam做了个网络监控,后来觉得流畅度不行,就做了个照相机,按键拍照储存在SD卡,也挺实用。
啊啊啊啊啊啊啊!!学习其实挺好玩的,不该不心甘情愿地去玩啊!