当前位置: 首页 > news >正文

STM32C8T6实现微秒延时函数delay_us

/* USER CODE BEGIN 0 */
void delay_us(uint32_t ii)
{uint32_t temp;SysTick->LOAD=ii*8;SysTick->VAL=0x00;SysTick->CTRL=0x01;//2号位1使用内核时钟do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16)));SysTick->CTRL=0X00;SysTick->VAL=0X00;
}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
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();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);delay_us(1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);delay_us(1);//}/* USER CODE END 3 */
}

说明:这里虽然是理论上延时1um,但是实际上使用keil arm模拟使用了20um那个样子(但是奇怪的是使用Proteus 8.15模式的时候模拟1s时间,Proteus很接近1s,使用了2s,而是不是20s)

在实际使用C8T6的时候1s,单片式实际花费10s,可见这个函数很不严谨。远远不如HAL_DELAY()函数来的严谨(后来发现这个函数可能是准确的---但如果是准确的为什么产生1s时间时候单片机里面不对?难道是单片机有问题?这就涉及到测量单片机晶振频率的问题)

进一步追踪发现:即使使用定时器来产生1us的事情,keil arm也还是无法准确模拟时间,因此更有可能是keil arm软件无法准确模拟us时间,可能软件模拟本身需要很多us吧。那么也许代表着:这个函数可以准确计算时间

本实验采用外部高速时钟8MHZ,systemtick时钟频率8MHZ(没有使用72MHZ)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux rsyslog三种远程转发配置方式
  • Failed to connect to github.com port 443:connection timed out
  • BI 数据可视化平台建设(1)—交叉表组件演变实战
  • 8255 boot介绍及bring up经验分享
  • python---数据库操作
  • Tensorflow中的张量操作
  • Spring依赖注入与控制反转
  • 设计模式-迭代器模式(Iterator)
  • xss 盲打
  • 大语言模型的关键技术
  • ElasticSearch优化
  • 光明源@智慧公厕的卫生安全与隐私平衡!
  • 无需公网IP!部署Apache服务器与内网穿透实现公网访问
  • Java中final用法
  • Linux - 基础IO(Linux 当中的文件,文件系统调用接口,文件描述符)- 上篇
  • 5、React组件事件详解
  • Android交互
  • Angular数据绑定机制
  • CSS中外联样式表代表的含义
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker容器管理
  • echarts花样作死的坑
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Fastjson的基本使用方法大全
  • Hibernate【inverse和cascade属性】知识要点
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • React-Native - 收藏集 - 掘金
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spring核心 Bean的高级装配
  • Vue UI框架库开发介绍
  • zookeeper系列(七)实战分布式命名服务
  • 从setTimeout-setInterval看JS线程
  • 工程优化暨babel升级小记
  • 简单数学运算程序(不定期更新)
  • 前端存储 - localStorage
  • 使用putty远程连接linux
  • 推荐一个React的管理后台框架
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ionic入门之数据绑定显示-1
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 带你开发类似Pokemon Go的AR游戏
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 安徽锐锋科技IDMS系统简介
  • #define
  • #git 撤消对文件的更改
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (39)STM32——FLASH闪存
  • (7) cmake 编译C++程序(二)
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (四)opengl函数加载和错误处理
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)