完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
概述
在使用 DHT11 的时候,时序通信需要微秒来操作,STM32CubeMX 自带一个系统时钟,但是实现的是毫秒级别的。因此就自己用通用计时器实现一个。 环境:
2.计数器时钟频率及计数模式 除了配置定时器的时钟,还需要配置计数器时钟频率,我们要实现微秒延时,因此计数器时钟频率应该是1MHz, 而要实现还需要以下3个参数:
其中fCK_PSC就是通用定时器框图中的CK_PSC, 即值为84MHz,而我们所要的计数器时钟频率1MHz 因此: PSC[15:0] = (fCK_PSC/CK_CNT) - 1 = (84/1) - 1 = 83 因此预分频系数为 83
4.具体实现代码 volatile bool elapsed = false; //用于判断设置的计数值是否耗尽(向下计数模式),耗尽时,在中断中奖会设置为true void setState(bool state) { elapsed = state; } bool getState() { return elapsed; } void usDelay(uint32_t time) { __HAL_TIM_SetCounter(&htim2,time); //设置计数值 setState(false); HAL_TIM_Base_Start_IT(&htim2); //开启定时器 while(!getState()); //判断计数值是否耗尽 HAL_TIM_Base_Stop_IT(&htim2); //关闭定时器 } 计数值耗尽回掉函数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM2) { setState(true); } } 5.代码测试 主函数的主循环中: while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf("hello usDelay"); for(int i = 0; i < 1000; i++) { usDelay(1000); } } 在串口调试助手中,可以看到如下,一秒打印一条语句 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 00:05 , Processed in 0.699052 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号