引子 集成电路总线(Inter-Integrated Circuit,IIC)是一种常用于单片机的同步串行通信接口规范,常见使用 I²C 的外设有EEPROM、传感器(如MPU9250中的磁力计)、时钟芯片(如DS3231)、低速ADC/ADC。相较于SPI,IIC通常速率更慢且电路更复杂,但所需接线更少。 I²C I²C一般有两条信号线:SDA(serial data line)和SCL(serial clock line)分别用于传输数据和时钟信号。一般两条数据线都需要外接上拉电阻,同时引脚…
引子 串行外设接口(Serial Peripheral Interface Bus,SPI)是一种常用于单片机的同步串行通信接口规范,常见使用SPI的外设有Flash(如W25Qxx)、传感器(如MPU9250)、LCD。相较于IIC,SPI通信速率通常更快(IIC常见的快速模式即400kbit/s,而SPI的通信速率取决于器件),并且推挽输出能够使得SPI拥有更高的传输速率(IIC为开漏输出,线路更复杂),但线路通常更多(IIC通常仅需SCL、SDA,双工下三线SPI需要SCK、MOSI、MI…
引子 前段时间用5个HPDL-1414做了一个20字符的显示模块HPDL1414x5,理论上可以作为许多应用的外设,于是决定使用基于ESP8266的NODEMCU平台驱动HPDL1414x5做一个自动网络校时的时钟。 NODEMCU NODEMCU是一个很久远的项目了,最开始是适配ESP8266的,但是ESP8266似乎都要退市了。项目主要就是一个最小开发板和lua的固件,硬件开源在这里,固件开源在这里,和它类似的还有microPython的固件,使用的是类似于python的语法。 NODEMC…
引子 众所周知,MDK的定义跳转和自动补全真的是一言难尽,没有编译的内容直接罢工跳转不了,自动补全也常年跳不出来,总想着要是能用VS Code看代码就好了。 如果直接用VS Code打开工程的话,又会报错满天飞,这个找不到路径,那个没有定义,为了解决这个问题,需要手动配置一下VS Code。 配置VS Code VS Code打开文件夹后,会读取.vscode/c_cpp_properties.json的C/C++配置文件,在这个文件里可以指定包含路径、定义等,c_cpp_properties.…
引子 HPDL-1414是一种支持部分ASCII(大写字母、数字、一部分特殊符号,具体来说是0x20~0x5F的字符)的四位数码管显示模块。HPDL-1414相较于普通数码管来说体积极小,作为显示模块颇有复古韵味。单个HPDL-1414的四个字符很难满足我们对显示字符的需求,并且HPDL-1414使用并行协议,会占用大量的端口,因此设计了仅需三根数据线就可驱动20字符的显示模块,并且兼容SPI协议。 模块使用 模块所需供电端口3个:+3.3V(为逻辑模块供电)、+5V(为HPDL供电)、GND,…
引子 在上篇文章中我们使用Keil MDK提供的GUI控制分散加载,实际上,工程会根据GUI中的这些设置生成一个分散加载文件(.sct),而这个文件才直接控制链接器分散加载,有时GUI提供的设置并不能满足我们的要求,就需要直接编写这个分散加载文件。 查看根据GUI设置生成的分散加载文件(.sct) 若使用GUI控制分散加载(Project – Options for Target ‘xxx’ > Linker 中已勾选Use Memory Layout From Target Dialog…
引子 某些单片机拥有多个ROM与RAM,例如STM32H750就有ITCM、DTCM、SRAM1~SRAM4等多块内存,并且他们的地址并不连续,同时某些外设也支持地址映射,例如QSPI,从而访问外部Flash的储存空间,如何管理这些地址成了一个问题。有时我们希望将某些代码加载到内存运行,以提升某些关键操作的速度。为了解决这些问题,就需要使用ARM编译器的分散加载(Scatter-loading)特性。在IAR中是由链接器配置文件(Linker configuration file(.icf))实…
GUIX与STM32H7相关资源 ThreadX官方文档 ThreadX代码仓库 STM32Cube MCU包 GUIX代码仓库 x-cube-azrtos-h7 GUIX与此处使用的LCD GUIX提供了一个软件GUIX Studio专门用于设计图形界面,可以在Microsoft Store微软商店中下载,需要注意的是这个软件在国内无法下载,需要将地区切换为美国。此处使用的LCD是使用ST7735主控,SPI进行通信的,颜色格式为RGB565。 GUIX移植 首先在GUIX代码仓库中下载GUI…
USBX与STM32H7相关资源 ThreadX官方文档ThreadX代码仓库STM32Cube MCU包USBX代码仓库x-cube-azrtos-h7 USBX移植(仅移植device部分) 首先在USBX代码仓库中下载USBX,将FileX的.\common\core\scr、.\common\usbx_device_classes\scr文件夹下的源文件全部添加到工程中,.\port文件夹下没有源文件,这一部分需要自己实现(STM32提供了相关代码),并添加包含路径.\common\co…
FileX与STM32H7相关资源 ThreadX官方文档 ThreadX代码仓库 STM32Cube MCU包 FileX代码仓库 x-cube-azrtos-h7 FileX移植 首先在FileX代码仓库中下载FileX,将FileX的.\common\scr文件夹下的源文件全部添加到工程中,.\port文件夹下没有源文件,这一部分需要自己实现(STM32提供了相关代码),并添加包含路径.\common\inc、.\ports\cortex_m7\gnu\inc,此时工程应该可以正常编译,F…