【ufun使用】普通的延时和使用SysTick(系统定时器)延时

本文介绍了如何在STM32单片机上利用SysTick定时器实现精确延时,包括寄存器配置和代码实现,并对比了传统空循环延时方法。

上次点了一个灯之后,总觉得没有什么意思,因为LED一直亮的也没什么意思,所以就得让它闪动起来,学过C语言的同学都知道一个空的循环函数就可以使CPU在那里空转,以达到延时的目的,所以这是我们的第一个延时的代码

void delay(unsigned int t)
{
	while(t --);
}

但是,如果这样就结束了,那就太没意思了,这可是stm32单片机啊,一个普普通通的延时就可以搞出花儿来。学过51的都知道,51有一个定时器的东西,stm32也有一个叫定时器的东西,当然stm32不只有一个定时器,它有一堆定时器,但是我现在主要说的是它的SysTick(系统定时器),人们常说的是滴答定时器,它属于Cortex-M3内核的一个外设,内嵌早NVIC(嵌套中断向量)中。系统定时器是一个24bit的向下递减的计数器,计数器每记数一次的时间是1/系统时钟,注意:系统时钟是八分频的,看图

如果是72M,经过分频之后是9M, 所以系统定时器定时一次是1/9M。那么我们计九次就是1us。当重装载数值寄存器的值递减到0时,系统定时器就产生一次中断,以此循环往复。
因为SysTick属于CM3内核的外设,所以所有基于CM3内核的单片机都具有这个系统定时器,这使得软件在CM3单片机中可以很容易移植。系统定时器在一般用于操作系统,用于产生时基,维持系统的心跳。在裸机中也常用作延时。
系统定时器有4个寄存器。使用SysTick产生定时的时候,只需要配置前三个寄存器,最后一个校准计时器不需要使用。
CTRL(控制及状态控制器) LOAD(重装载数值寄存器 )
VAL(当前数值寄存器) CALIB  校准寄存器

介绍如图

<think>好的,用户之询问了如何使用NX Open C++UFUN创建正方体,现在他提出新的要求:不要使用UFUN,而是使用NX Open。我需要调整之的回答,确保使用NX Open的现代C++ API,而不是传统的UFUN函数。 首,我需要确认用户的需求。用户可能正在转向NX Open的面向对象方法,或者他们的项目要求使用更高层次的API。UFUN是较旧的函数库,而NX Open C++提供了更面向对象的方式,可能与最新的NX版本兼容性更好,代码结构更清晰。 接下来,我需要回忆NX Open C++中创建块体的方法。通常,这涉及到使用会话(Session)、部件(Part)、建模器(Modeler)等类,以及特征构建器(BlockFeatureBuilder)。需要确保代码示例使用这些类方法,而不是直接调用UF_MODL_create_block1这样的UFUN函数。 然后,我需要检查之的回答中的代码,将其转换为使用NX Open C++的类。例如,用BlockFeatureBuilder来设置参数,而不是直接调用创建块的函数。同时,需要处理错误检查,可能使用NX Open的异常处理机制,或者检查每个方法的返回值。 另外,用户可能希望代码更符合现代C++标准,比如使用智能指针、命名空间等。不过NX Open C++ API可能仍基于传统的C++风格,所以需要遵循其文档中的示例结构。 还要注意环境配置部分,确保用户知道需要链接的库可能不同。例如,使用NXOpenCPP.liblibnxopen_cpp.lib,而不是之UFUN库。同时,包含的头文件可能不同,比如使用NXOpen/UFPart.h等。 在代码结构方面,可能需要初始化NX Open会话,获取当部件,创建特征构建器,设置参数,提交构建器,然后处理结果。需要详细说明每一步骤,特别是如何设置原点、尺寸方向,以及如何提交特征。 需要提醒用户注意事项,比如单位系统、错误处理的重要性,以及如何扩展代码来创建长方体或更复杂的形状。可能还需要指出NX Open C++UFUN之间的主要区别,比如面向对象与过程式编程的区别,以及资源管理的不同方式。 最后,确保回答结构清晰,分步骤说明,代码示例正确,并且解释关键参数注意事项。避免使用UFUN相关的函数,完全使用NX Open C++的API来实现功能。还要验证代码是否在NX环境中实际可行,可能需要参考最新的NX Open文档确认函数名称用法。</think>以下是通过NX Open C++(不使用UFUN)创建正方体的实现指南: ------------- ### 新版本NX Open C++实现特点 1. 基于面向对象API 2. 使用智能指针管理NX对象 3. 更现代的异常处理机制 4. 直接集成NX建模工作流程 ------------- ### 步骤1:项目配置 1. 链接库调整: ```properties NXOpenCPP.lib libnxopen_cpp.lib ``` 2. 新增头文件: ```cpp #include <NXOpen/NXObjectManager.hxx> #include <NXOpen/Features_BlockFeatureBuilder.hxx> ``` ------------- ### 步骤2:核心实现代码 ```cpp #include <NXOpen/Session.hxx> #include <NXOpen/UnitCollection.hxx> #include <NXOpen/Features_BlockFeatureBuilder.hxx> using namespace NXOpen; int main() { // 初始化NX Open环境 Session::GetSession()->NewMark(); // 获取当工作部件 Part* workPart = Session::GetSession()->Parts()->Work(); // 创建块特征构建器 Features::BlockFeatureBuilder* blockBuilder = workPart->Features()->CreateBlockFeatureBuilder(nullptr); // 设置基准坐标系 blockBuilder->SetBooleanOption(Features::Feature::BooleanTypeCreate); // 定义立方体参数 Point3d origin(0.0, 0.0, 0.0); // 原点 Vector3d xDir(1.0, 0.0, 0.0); // X方向 Vector3d yDir(0.0, 1.0, 0.0); // Y方向 // 设置方向与尺寸 blockBuilder->Orientation()->SetXAxis(xDir); blockBuilder->Orientation()->SetYAxis(yDir); Unit* unit = workPart->UnitCollection()->FindObject("MilliMeter"); blockBuilder->SetLength(unit->ConvertToBase(10.0)); // X方向长度 blockBuilder->SetWidth(unit->ConvertToBase(10.0)); // Y方向长度 blockBuilder->SetHeight(unit->ConvertToBase(10.0)); // Z方向长度 // 提交特征创建 Features::Feature* feature = blockBuilder->CommitFeature(); blockBuilder->Destroy(); // 释放构建器资源 // 更新模型显示 Session::GetSession()->UpdateManager()->DoUpdate(); return 0; } ``` ------------- ### 步骤3:关键对象说明 1. **BlockFeatureBuilder**: - 特征构建器模式(`BooleanTypeCreate`) - 方向控制通过`Orientation()`方法设置 - 尺寸单位自动转换 2. **参数设置要点**: $$ \begin{cases} \text{Length} = 10\text{mm} \\ \text{Width} = 10\text{mm} \\ \text{Height} = 10\text{mm} \end{cases} $$ 3. **资源管理**: - 必须调用`Destroy()`释放构建器 - 使用智能指针时自动管理生命周期 ------------- ### 步骤4:高级配置方法 ```cpp // 设置自定义原点 blockBuilder->SetOrigin(Point3d(5.0, 5.0, 5.0)); // 创建倾斜立方体 Vector3d customX(1.0, 0.5, 0.0); Vector3d customY(-0.5, 1.0, 0.0); blockBuilder->Orientation()->SetAxes(customX, customY); // 添加材料属性 feature->SetAttribute("Material", "Aluminum-6061"); ``` ------------- ### 差异对比表 | 特性 | UFUN实现 | NX Open C++实现 | |-------------------|-------------------|-----------------------| | 编程范式 | 过程式编程 | 面向对象 | | 资源管理 | 手动释放 | 智能指针+Destroy() | | 单位处理 | 直接数值输入 | 单位系统自动转换 | | 错误处理 | 返回错误码 | 异常机制 | | 特征编辑 | 需要单独操作 | 构建器模式集成 | ------------- ### 注意事项 1. **会话管理**: - 必须使用`Session::GetSession()`获取当会话 - 新建操作调用`NewMark()`创建撤销标记 2. **单位系统**: - 通过`UnitCollection`获取当单位 - `ConvertToBase()`确保数值单位统一 3. **扩展应用**: - 结合`Expression`类实现参数化设计 - 使用`FeatureCollection`管理特征树 建议参考《NX Open C++ Reference Guide》获取完整的类库说明。现代NX二次开发推荐优使用NX Open C++ API,其代码可维护性NX版本兼容性更优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值