历史上的今天
今天是:2025年01月03日(星期五)
2020年01月03日 | STM8学习笔记---如何在程序中确定寄存器名称
2020-01-03 来源:eefocus
在刚开始写程序的时候,在程序中需要设置寄存器的时候,往往不知道寄存器名称怎么写才是对的,这时候可以通过头文件来查看寄存器是如何调用的。在打开一个IAR工程文件,打开main.c文件,然后再引用的头文件上单击鼠标右键,选择Open "iostm8s003F3.h"打开所引用的头文件。

假如我们要设置PB5口输出0,首先在STM8中文参考手册中找到GPIO输出寄存器

我们要设置的是PB_ODR寄存器,这时在打开的iostm8s003F3.h文件中按下Ctrl+F按钮,然后输入PB_ODR,点Find Next

这时候就会定位到PB_ODR寄存器宏定义位置处
#define PB_ODR_ODR0 PB_ODR_bit.ODR0
#define PB_ODR_ODR1 PB_ODR_bit.ODR1
#define PB_ODR_ODR2 PB_ODR_bit.ODR2
#define PB_ODR_ODR3 PB_ODR_bit.ODR3
#define PB_ODR_ODR4 PB_ODR_bit.ODR4
#define PB_ODR_ODR5 PB_ODR_bit.ODR5
#define PB_ODR_ODR6 PB_ODR_bit.ODR6
#define PB_ODR_ODR7 PB_ODR_bit.ODR7

这块列出了关于PB_ODR相关的所有定义,可以看到PB5的位定义
#define PB_ODR_ODR5 PB_ODR_bit.ODR5
我们可以直接调用 PB_ODR_ODR5 对PB5口进行操作,
PB_ODR_ODR5 = 0;就是设置PB5口输出低电平。
当然也可以采用传统的对PB口整体赋值
PB_DDR |= ( 1 << 5 ); 设置PB5口输出高电平。
为什么可以直接对PB5口进行位操作呢,因为在头文件中,官方已经定义好了关于PB口位操作的结构体。
typedef struct
{
unsigned char ODR0 : 1;
unsigned char ODR1 : 1;
unsigned char ODR2 : 1;
unsigned char ODR3 : 1;
unsigned char ODR4 : 1;
unsigned char ODR5 : 1;
unsigned char ODR6 : 1;
unsigned char ODR7 : 1;
} __BITS_PB_ODR;
#endif
__IO_REG8_BIT(PB_ODR, 0x5005, __READ_WRITE, __BITS_PB_ODR);

这样通过查看头文件,就能很清楚的直到,关于单片机的寄存器如何调用。
史海拾趣
|
在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。 在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。… 查看全部问答> |
|
有一台控制器设备,有LAN接口,IP地址是200.200.200.* 直接通过网线连接到电脑上,电脑的IP地址设为200.200.200.*,DNS是255.255.255.0网关设为192.168.1.1则可以连接到控制器,若把IP地址和网关设为其他的却不行,控制器软件只有一个IP地址,把IP ...… 查看全部问答> |
|
麻烦高手看一下,我用的是增强型uart,pc发送一个“s”给单片机,单片机受到后会给pc发送一个response at 9600 baud 。不知程序是否有问题??? 程序如下: #include \"reg932.h\" #define uchar unsigned char uchar temp; char text[]= ...… 查看全部问答> |
|
最近又在电子元件技术网上看一个产品介绍中看到了这样的说法“本产品采用16位高精度ADC”,看到这样的文章我真想把这句话改为“本产品采用16位,高精度ADC”。因为实际上16位是分辨率,分辨率和转换精度是一个有联系但本质不同的概念。这也 ...… 查看全部问答> |




