自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 一种驱动器的功能安全架构介绍

1.通用基于总线或者非总线的架构。可以实现ethercat的FSOE,profinet的profisafe,或者伺服本体安全DIO现实安全功能。4.可以实现SS1,SS2,STO,SBC,SOS等安全功能。单一个fs cpu出现故障,不会导致停机。2.基于1oo2D架构,安全等级可以达到sil3。下图提供了驱动器实现安全功能的架构。

2024-04-09 11:18:53 317 1

原创 STM32H7串口DMA+空闲中断实现接收和发送不定长度数据

stm32f103芯片的串口一直使用DMA+空闲中断,现在使用stm32h2芯片,打算也使用相同的方法芯片型号:stm32h743串口:USART2代码生成:stm32CubeMX第一步:使用stm32CubeMX生成代码第二步:添加自己代码1.发生空闲中断需要reset DMA重新开始接收数据HAL_StatusTypeDef HAL_UART_DMAStopRx(UART_HandleTypeDef *huart){ /* Stop UART DMA Rx request if on

2020-08-29 21:37:14 5618 4

原创 DSP串口SCI最高效的接收和发送不定长度的方案

本文介绍dsp高效接收和发送不定长度的数据,该方法减小cpu的中断次数,经过长时间检验,该方法安全可靠效率最大。我使用的是28034只有4级FIFO,在优化前中断深度设置为1,cpu频繁中断,导致正常程序受影响。经过改进,设置发送中断深度为0级,接收中断为4级,只有在数据发送完成和接收满4个字节中断。接收流程为:等待接收中断—》读取4个fifo数据—》超时检查—》读取fifo剩余数据。这样就会接收完整的一帧数据。发送流程:触发中断开始发送数据—》写入4个数据到发送fifo----》等到fifo为空中断–

2020-07-03 16:43:36 6192 11

原创 IO模块软件处理方案

在工业自动化领域输入/输出模块比较常见,有数字量输入DI,数字量输出DO,模拟量输入AI,模拟量输出AO,高速脉冲输入HPI,高速脉冲输出,HPO。下面介绍这些IO模块软件处理方案1.DI延时和滤波2.DO开通延时和关断延时3.AI值转化,校正,滤波,标定4.AO值转化,校正,标定未完待续,搞明白这些,IO模块的软件处理就没有问题!!!!...

2020-07-01 11:27:17 4157

原创 用着超爽的stm32的串口DMA+空闲中断接收和发送方案

串口一次只能传1byte数据,在实际应用中,我们会发送和接收一串数据,如果没发送和接收一个数据就会进去中断会严重影响程序的正常执行,占用过多的cpu资源。如果串口模块能够自动判别一串数据的结束,并且把接收数据放在我们指定的ram,发送数据直接扔到ram不用cpu操作,那该多省心!stm32的串口DMA+空闲中断接收和发送方案就能实现。我使用的是stm32f103芯片和freertos系统,串口程序已经长时间高效稳定运行在几万台设备上。我使用的是uart4。代码如下:初始化void UART4_Ini

2020-07-01 11:03:41 1584

原创 stm32串口频繁进入中断导致死机

stm32使用DMA+空闲中断,一次可以接收到一帧数据,数据由DMA直接搬到指定的内存,然后产生空闲中断,非常方便。但是在现场干扰很大的地方,程序死机复位了!初步怀疑是串口的中断没有处理好。网上查找资料:https://blog.csdn.net/origin333/article/details/49992383发现如果发生ORE串口中断错误,要清除ORE中断需要按顺序读取USART_SR和USART_DR寄存器!那就是说USART_ClearFlag清掉所有Flag后,还必须读一遍USART_DR寄

2020-06-23 16:03:57 3949 1

原创 freeRTOS崩溃原因

freertos运行一段时间后跑飞!可以使用KEIL在线仿真,查看程序是如果进入hardfault。出现问题后,程序停止在断点打开栈view如下程序在20ms任务读fpga的数据时候,先打开调度锁 vTaskSuspendAll(),读完数据后关闭锁调度xTaskResumeAll()。在调度锁关闭期间,产生了tick中断就绪了sys_deal或是产生uart中断使能了keyboard任务,freeRTOS会将这些在锁调度期间由阻塞变为就绪的任务用一个链表LIST1管理。在xTaskResum

2020-06-23 15:51:47 3635

原创 无bootloader的在线升级IAP方案

我们开发的产品在出厂后,由于产品功能增加,或修改bug等原因,需要升级产品的固件firmware,把最新的程序导入到存储器中。怎么把程序烧到flash?通常有三种情况,分别对应产品开发的三个阶段,分别是:(1)研发调试阶段,使用仿真器通过仿真接口把程序烧到flash(2)工厂生产阶段,生产人员通过工装软件,短接boot引脚, cpu上电后执行内部的rom等待程序从串口,can等外设传入。(3)产品发货后,升级程序,不能拆外壳,不能拨码,只能想办法在线升级。我们需要设计一段程序用来擦除旧的程

2020-06-21 16:13:20 363

原创 多元非线性方程组的雅克比迭代解法

近段时间遇到了多元非线性方程组求解问题,总是觉得理解的不透彻。所以单独将问题拿出来,循序渐进,由浅到深解决问题。好吧,从最简单的开始吧!用迭代法解下面的方程组 2*x1*x1+x2*x2-1=0; x1+x2=0;基本的思想将非线性化为线性进行求解…(省略)…vc++实现如下 #include<stdio.h>#include<math.h>//float f1(float x1,

2020-06-21 12:52:27 4443

原创 数码管按键指针函数的应用

首先,我们来看看函数指针的定义 int (*f) (int x); /*声明一个函数指针 */  f=func; /* 将func函数的首地址赋给指针f */ (*f)(x);/*调用f指向的func函数*/接下来,我们再看函数指针一维数组int (*f[5])(int x) =//定义了5个函数指针,这5个指针地址在初始化后可以修改{ func0; func1; func2; func3; func4;};int (..

2020-06-21 10:09:18 283

原创 no-OS没有操作系统的任务调度

有些嵌入式系统,由于资源或其他条件的限制无法移植像ucos,freertos等实时操作系统。但是使用过实时操作系统的开发者,实实在在感受到os给我们的开发带来了便利。比如说有操作系统后开发者不用考虑系统调度,只要设计几个任务后,每个任务就像“并行”运行在不同的CPU。今天我们讨论的是怎样在没有操作系统的情况下实现类似的不同任务的设计和调度。 我们的设计目标是设计一个简单的调度器。 我们把CPU的资源按照固定的时间间隔切分为一个个槽slot,通常为时间槽为1ms。我们可以把100个时间槽定义为一个...

2020-06-20 20:21:39 702 2

原创 驱动器软件系统架构

驱动器软件系统架构思考 驱动器分层概述 模块设计理论 原子模块组合模块 运行实体 1对1模块通信 1对n模块通信 同步通信 异步通信 无应答通信 有应答通信 无缓冲通信 有缓冲FIFO通信 有优先级通信 step by step 驱动器模块化框图 事件驱动-状态机编程 简单状态机 复杂状态机 无OS 有OSOS比较分析 数据可视化和可追踪调试等待完成...

2020-06-02 10:55:23 606 1

原创 双CPU之间的通信方案

在设计电子电气系统的时候,经常会遇到需要设计两个或两个以上CPU协同工作情况。如果有一款芯片集成有两个CPU,CPU之间的通信在芯片内部就能又快又可靠的完成,想象是美好的,但是结局是悲伤的,需求差异太大,只能定制(成本高的无法想象)。我们通过组合不同CPU芯片实现我们想要的功能。 比如说,现在有个安全系统需求,需要一个通信CPU与其他系统通信,这个通信CPU要和本系统内的执行功能算法的CPU交互数据,这时候我们去市场上查找发现:没有这种即能满足通信需求又能满足功能算法的集成双CPU方案!那...

2020-06-01 10:16:52 10565 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除