月份:2017年9月


C语言结构体与寄存器


单片机开发中免不了会与寄存器打交道。在51,AVR单片机中,会有一个头文件将寄存器的地址定义成更容易阅读的宏,在C语言中通过宏定义来访问寄存器。

#ifndef _AVR_IOM128_H_
#define _AVR_IOM128_H_ 1
............
/* Input Pins, Port D */
#define PIND      _SFR_IO8(0x10)

/* Data Direction Register, Port D */
#define DDRD      _SFR_IO8(0x11)

/* Data Register, Port D */
#define PORTD     _SFR_IO8(0x12)

/* Input Pins, Port C */
#define PINC      _SFR_IO8(0x13)

/* Data Direction Register, Port C */
#define DDRC      _SFR_IO8(0x14)

/* Data Register, Port C */
#define PORTC     _SFR_IO8(0x15)
...........

// When use GPIO register 
PORTD = 0xff; 
tmp = PINC;

而在STM32单片机中,寄存器不再是地址转化成宏定义的形式了,变成了一个结构体。对C语言不熟的同学可能会感到困惑。其实这样的定义方式,对于STM32单片机的寄存器设计而言,是更合理的一种方式。Read More »


RTThread与CubeMX – (1)初识CubeMX


手上有一块很早之前申请的STM32F767ZI Nucelo开发板,一直放在那里吃灰。这块板子上的F7是STM32系列比较高端的型号,自带2M Flash和512K的RAM,可以跑到216MHz。ST逐渐将开发库从以前的标准准转换到了HAL库,之后的高端型号更是只提供了HAL库,没有标准库。这块板子上的F7就只能用HAL库来开发。我这个只用过标准库的老古董也要开始学习HAL库了。我想既然都用HAL库了,何不一步到位把CubeMX也用上。ST出了一个图形化的配置工具CubeMX,这个CubeMX可以用图形化的方式配置芯片各功能,并且能够检测配置冲突,对于功能复杂引脚多的芯片,图形化配置很方便。这个工具还能根据配置生成报告,适合拿来做成报告的内容。

CubeMX对官方的开发板进行了预定义,可以直接选开发板,选好之后会对板上的功能进行预初始化,比如引脚别名之类的。

Read More »