推荐阅读最新更新时间:2024-11-11 20:42
STM32 CAN总线调试经验
前言 STM32 CAN代码网上很多,但大都是讲如何配置的,对于一些原理以及注意事项没有很清楚的说明。在实际调试过程中,两个设备间的通信只要设备CAN的配置一样基本就可以调通,但在增加设备的过程中,很容易出现多设备无法通信的问题,这里主要就这一问题进行说明。 硬件 STM32F042G4 + MAX3051 测试过程 测试板回来后,两个设备间的通信轻松搞定,但在增加设备的过程中,增加的设备总是不能正常通信。详细比对了一下配置,也没有任何问题。后来,仔细研读MAX3051的芯片手册,得到以下几个重要信息: MAX3051有四种工作模式 高速模式:数据传输速率可达1Mbps,但抗干扰能力弱,需要双绞线 斜率控制:可
[单片机]
STM32+ucosll程序跑飞问题解决办法
STM32单片机移植ucosll程序,运行几个小时之后跑飞。 ucsll创建4个任务,OSQPend()消息队列任务,1s定时任务,2s定时任务,按键扫描任务。其中OSQPend()消息队列任务优先级最高,用于接收各中断消息,由于消息队列在没有消息时会将任务挂起,所有没有添加延时函数。 一开始怀疑堆栈溢出,将单片机栈区扩大,各任务堆栈也扩大,仍然无效。 多次测试发现,程序跑飞后OSQPend()消息队列任务仍然能够接受中断消息,怀疑优先级有问题,将消息队列任务的优先级调至最低,再未遇到程序跑飞情况。 只是仍然不解为何会停留在消息队列任务中!!
[单片机]
基于IAP的STM32程序更新技术
引言 嵌入式系统的开发最终需要将编译好的代码下载到具体的微控制器芯片上,而不同厂家的微控制器芯片有不同的下载方式。随着技术的发展和应用需求的更新,用户程序加载趋向于在线编程的方式,越来越多的芯片公司提供和开放了用户更新程序的接口与方式,以提高整个系统的可靠性和可维护性。 ST公司基于CortexM3内核的STM32系列产品得到了广泛应用,在许多基于STM32系列产品的开发过程中不可避免要进行用户程序的加载。本文在介绍IAP技术原理基础上,详细论述使用该技术在STM32F103ZE芯片上实现用户在线更新功能的方法,并具体分析其中可能发生异常的原因。 1背景综述 1.1主要程序更新方式 目前,除了直接通过仿真器或烧
[单片机]
安全启动 - STM32安全技术RDP与MPU
检查安全配置 & 构造安全执行环境 同一般的 MCU 启动比较,STM32 安全启动多了一些步骤。首先,安全启动检查相关的安全静态配置是否已经设置完毕,例如 RDP 的级别,PCROP,WRP。如果首次启动则需要配置这些选项字节。然后,安全启动会去设置那些每次运行都需要重新设置的硬件配置 Firewall,MPU,IWDG 的配置。用户可参考下图图示理解安全启动的过程。最后,是对下一级固件进行验证。这个安全的执行环境保证了启动的顺序不会被改变,以及启动代码的保密性。 防外部攻击 此处谈及的外部攻击不是把芯片剖开,使用光学显微镜进行拍照,从而进行逆向工程;或者使用激光对芯片线路进行切割或者连接。这种攻击的成本非常高,需要
[单片机]
STM32 (CortexM3) 中NVIC(嵌套向量中断控制)的理解
一、STM32 (Cortex-M3) 中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作 亚优先级 或 副优先级 ,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序/中断程序运行 抢断式优先响应,俗称中断嵌套。 2. 何为副优先级(subpriority) 在占先式优先级相同的情况下,高副优先级的中断优先被响应; 在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到
[单片机]
STM32常用的一些开发工具
本文为大家汇总 STM32 常用的一些开发工具。 IDE(集成开发环境) IDE:IntegratedDevelopmentEnvironment,集成开发环境。 IDE通常包含编辑器、编译器、调试器、图形用户界面等集成多种工具的应用程序(也就是大家写代码的上位机软件)。 通用IDE 1.KeilMDK 网址: https://www.keil.com/ 后续可能会将Keil MDK 升级为 Keil Studio,后台回复关键字【Keil系列教程】查看更多内容。 2.IAREWARM 网址: https://www.iar.com/ 后台回复关键字【IAR系列教程】查看更多内容。 3.Embedded Studio
[单片机]
stm32和电机开发(上位系统)
电机本身的开发一般都是用PID或者FOC完成的。但是,作为一个系统来说,在stm32之前,一般还会有一个主机系统,这个主机系统一般跑linux系统或者是windows系统。如果是linux系统,那么一般是各种各样的soc;如果是windows系统,一般就是pc电脑了。 为了说明电机控制系统和上层是怎么交互的,我们可以拿写字机做一个说明。写字机一般是拿pc当作主机进行处理,对图像进行预处理后,生成一条一条的控制命令。这些命令,通过串口发送给stm32,经过串口解析、插值、速度规划、x/y/z控制之后,就可以把对应的图像通过笔的书写打印出来。类似的方法还可以用于雕刻、3d打印等场合。 有了上面的说明,我
[单片机]
STM32让printf通过串口打印及自定义printf函数
在嵌入式系统中,通过串口打印log是非常重要的调试手段,但是直接调用底层驱动打印信息非常不方便,在c语言中一般使用printf打印基本的显示信息,而默认printf的结果不会通过串口发送,所以需要对printf的输出进行重定向。 有时候需要同时从多个串口输出信息,如果仍然想通过printf函数输出信息,就需要自己写printf的实现。 一. 初始化端口和配置 对串口用到的GPIO进行配置,并对串口的参数进行初始化。 二. 宏定义并实现具体的发送函数 代码在编译时首先判断__GNUC__有无定义,之后将PUTCHAR_PROTOTYPE替换成具体的定义。在keil5中,使用fputc函数,所以其实
[单片机]