4.8k 4 分钟

# ARM 架构 随着对 STM 的逐步了解,就会发现一些特别的地方,例如,为什么 ARM 可以像访问内存一样访问外设? # 为什么 ARM 可以像访问内存一样访问外设? 不要觉得这是理所当然的 在 x86 上驱动程序需要有对应的驱动文件,驱动文件需要通过库函数或是内联汇编才能实现 虽然 ST 也需要驱动文件,但是底层的实现就很有意思,但 ST 系列的单片机可以使用 C 语言像访问内存一样来访问外设 从汇编的层面来看 ARM 架构下的处理器可以通过 ldr 来操作任意的内存和外设,而 x86 不同 他是通过 IN 指令和 MOV...
6.1k 6 分钟

# C 语言语法 # static 用法 限制作用域,存储方式变为静态存储 修饰全局变量,限制作用域。在链接过程中,多文件中的重名变量不会冲突. 修饰局部变量,延长生命周期,存储方式变为静态存储只进行一次初始化. 修饰函数,限制函数作用域,局限在文件内部。在连接过程中避免和多文件中同名函数冲突 # #define 和 const 的区别 const 定义的常量在程序运行过程中只有一份拷贝 (因为它是全局的只读变量,存放在静态区), 而 #define 定义的宏常量在内存中有若干个拷贝 (没有存空间) #define 宏是在预编译阶段进行替换,而 const...
2.8k 3 分钟

今天面试了一个很有趣的企业,HR 超级友善,虽然技术有一些问题没有回答上来,(挠头) 例如,舵机的控制脉宽,和脉宽周期 还有 modbus rtu 协议的开始和结束的条件,以及位置 PID(本质是一样的嘛) 趁这次机会回顾一下这些内容 # 舵机脉宽 # 舵机控制信号 # UART # 疑惑 # UART 是不是协议 技术面说 UART 不是协议,当时没反应过来就顺着说 UART 是外设。 但是等缓过来思考 UART 的确是一个协议,因为他是被设计出来用于将并行数据转化为并行数据的,有开始信号,有结束信号,还可以有校验位,严格意义上来说串口是物理层通信协议。 与 IIC 和 SPI...
573 1 分钟

最近在使用,CCS 的时候总是会出现输入法变成繁体的问题,都是手动设置回去,一直没管它。新年新气象,这个问题年初一就要解决. 去看了一下 win11 的快捷键映射。好家伙,简体繁体切换的快捷键和源码格式化的快捷键冲突了,这就忍不了 繁体我压根用不到,所以这个给快捷键等于浪费,难怪有些时候格式化源码不好使,所以我决定关闭这个没用的快捷键 # 第一步:打开语言设置 # 方案一: WIN+S 搜索语言设置 win+s 键,输入语言设置 说实话这是我最喜欢的方案,大部分系统设置我都是直接 win+s 然后搜索的,搜索到直接回车就能进入界面,方便快捷 #...
4.6k 4 分钟

虽然 28379D 有两个核,但工作时钟的配置方法还是一致的,所以可以从单核的角度来学习时钟配置的方法 # 时钟框图 无论什么外设都离不开功能框图,所以还是先从功能框图入手分析时钟配置的基本信息 # 时钟源部分 TMS320F28379D 有三个时钟源,两个内部时钟源和一个内部时钟源,通过 CLKSRCCTL1 来选择时钟源 INTOSC2 是默认的 10M 内部晶振,但是容差太差,如果要使用 USB 或者 CAN 外设则需要使用外部晶振 INTOSC1 是备用的 10M 内部晶振,但是只能用于 DCM 和看门狗。 XTAL 是外部晶振接口,提供稳定的时钟频率 # 振荡器 +...
1.8k 2 分钟

# 说明 本文硬件基于 LaunchXL-F28379D 和 逻辑分析仪,软件基于 CCS 10.4 版本, 帮助文档为 C2000 的例程和官方文档 因为 GPIO 输入详细的说明了如何找寄存器和分析文档,所以这里就简单的对寄存和一些与 MCU 不同的地方进行简单分析,不再长篇大论的做思路分析 # 逻辑框图 老样子,先搞上原理,相较于 GPIO 输出模式,输入模式就更为复杂一些. 从原理图中可以得到,输入需要配置 GPyPUD、GPyINV、GPyCTRL 和 GPyQSELn 寄存器,当然还有之前 输出模式所提及到到的寄存器。 # 寄存器 所有相关的寄存器还是从文档的寄存器表以及...
7.8k 7 分钟

离大谱,没 commit 就回滚了,居然得重写 原本,没有怎么啰嗦的,没想到,第三次写,就越写越啰嗦了,诸位见谅 # 说明 本文硬件基于 LaunchXL-F28379D 和 逻辑分析仪,软件基于 CCS 10.4 版本, 帮助文档为 C2000 的例程和官方文档 在此说明,这一系列的文章主要是记录我学习思考的过程,可能会啰里啰唆 个人观点,授人以鱼不如授人以渔,最后会给出完整的代码和工程的链接 #...
704 1 分钟

# 起因 最近开始捣鼓树莓派,之前那它做了个旁路由,最后发现使用率太低,准备换成 Home Assistant 结果在刷 Raspberry Pi OS 的时候,发现创建 wpa_supplicant.conf 和 SSH 文件的方式完全没有用了 一开始我以为是 wifi 密码大小写问题,改了几次都不行,然后接入有线网络后登录 SSH 发现,默认的账号密码都不好使 # 结果 到官网查阅了一下更新记录,发现 大致意思就是,为了安全起见删除了默认账号 # 解决方法 # 方案一 (推荐) 使用官方的烧录软件: 地址 有梯子的建议关掉哦,我挂梯子反而下的慢 #...
587 1 分钟

# 问题 今天重新写了一个 gpio 的抽象层,结果编译的时候出现了一个 bug: HAL_StatusTypeDef 无法识别 一看这种问题,涉及库文件不是头文件引用错就是,无意中改动了宏. # 思考 由于我的工程是直接从 CubeMX 中生成的所以不存在什么宏改错的问题 那就到了头文件的问题了,首先考虑自己编写的 gpio 文件 我的源码中只有一个头文件与 HAL 相关 很显然有一半的可能是 stm32f4xx_hal_gpio.h 惹的祸. 所以我将 stm32f4xx_hal_gpio.h 替换为 main.h 编译后 0 error 0 wraning ,...
8.5k 8 分钟

写在前面: 平台: STM32F407VGT6 + W25Q64FV 8MFLASH # 为什么要移植 SFUD 记得当初学标准库读写 FLASH 的时候,页写入代码可长可长了,而且不同的 flash 一套检测的宏不一样,改来改去特别麻烦. 而 SFUD 驱动只需要 FLASH 支持 SFDP 协议即可移植 SFUD 后只需实现初始化和写操作就可以愉快的使用 FLASH. 膜拜 armlink 大佬. 是 JEDEC (固态技术协会) 制定的串行 Flash 功能的参数表标准, 最新标准,目前新生产的 flash 都是支持的只有特别老旧的芯片才不支持. 而且 SFUD 对于不支持 SFDP 的...