STM32G431学习笔记(一)之typedef的使用

typedef struct{
	bool press;
	uint8_t state;
	uint16_t long_time;//按下按键的时间
}Btn;

        在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名{结构体所包含的变量或数组};typedef关键字用于为已有的数据类型定义一个新的名称(别名)。

        这里的Btn是定义的新名称(别名),它代表了一个特定的结构体类型。这个结构体包含了三个成员:

  1. press:一个布尔值(bool),用于表示按键是否被按下。
  2. state:一个8位无符号整数(uint8_t),用于表示按键的某种状态(例如,是否正在被按下、释放、单次点击、长按、双击等等)。
  3. long_time:一个16位无符号整数(uint16_t),可能用于表示按下按键的时间(可能是以某种单位,如毫秒),也可能用于判断是否达到了长按的阈值。

        通过定义这个Btn别名,可以更方便地声明这个结构体的变量,而不需要每次都写出完整的struct定义。例如:

Btn myButton;

而不是:

struct {  
    bool press;  
    uint8_t state;  
    uint16_t long_time;  
} myButton;

 所以在STM32中用typedef关键字为已有的数据类型定义一个新的名称后就可以直接用”新名称+一个数组={  }“的方式声明并初始化该数组,并将数组中的所有元素进行初始化。例如:

Btn key[4] = {0}; //声明并初始化一个包含4个Btn类型元素的数组key,并将数组中的所有元素初始化为0

        在这里,Btn是一个之前通过typedef定义的结构体类型别名。key是这个类型的数组,它有4个元素。初始化{0}意味着数组中的每个元素都会被初始化为0。对于结构体来说,如果它没有明确的初始化,那么它的所有成员都会根据其类型进行默认初始化。对于基本数据类型(如booluint8_tuint16_t),默认初始化通常意味着将它们设置为0

        所以,Btn key[4] = {0};将创建一个Btn类型的数组key,数组中的每个Btn元素都将被初始化为它的所有成员都是0的状态。这种初始化方式是一种简便的写法,用于确保结构体数组中的所有元素都被正确地初始化,而不需要为数组中的每个元素单独编写初始化代码。本条语句将确保key[0]key[1]key[2]key[3]这四个Btn结构体实例的press成员被初始化为false(因为在C语言中,bool类型的0通常表示false),state成员被初始化为0long_time成员也被初始化为0。Btn 使得代码更加清晰,也提高了代码的可读性和可维护性。

        当需要在多个地方使用这种结构体时,使用 typedef 定义的别名会非常方便。此外,如果之后需要修改这个结构体的定义,只需要在一个地方(即 typedef 的声明处)进行修改,而不需要在代码中搜索并替换所有使用这个结构体的地方。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32G030微控制器中,每个外设都有一个或多个实例。您可以使用这些实例来配置和操作特定的外设。 首先,您需要在代码中包含相应的外设头文件,例如UART、SPI或I2C。然后,您可以按照以下步骤来使用实例: 1. 选择要使用的外设实例。例如,如果要使用USART1作为UART通信接口,则可以使用USART1实例。 2. 配置外设实例参数。根据外设的要求,配置相应的寄存器来设置波特率、数据位数、停止位等通信参数。 3. 初始化外设实例。通过将适当的值写入控制寄存器并使能外设时钟,初始化所选的外设实例。 4. 发送和接收数据。通过读写数据寄存器,发送和接收数据。具体的读写方法取决于所选外设的接口和协议。 下面是一个简单的示例代码片段,展示了如何使用USART1外设实例进行UART通信: ```c #include "stm32g0xx.h" // 包含STM32G030的头文件 void UART_Init(void) { // 选择USART1作为UART通信接口 USART_TypeDef *uart = USART1; // 配置波特率和通信参数 uart->BRR = 48000000 / 9600; // 波特率为9600 uart->CR1 |= USART_CR1_TE | USART_CR1_RE; // 使能发送和接收 // 初始化UART uart->CR1 |= USART_CR1_UE; // 使能USART } void UART_SendChar(char c) { // 等待发送缓冲区为空 while (!(USART1->ISR & USART_ISR_TXE)) ; // 发送字符 USART1->TDR = c; } char UART_ReceiveChar(void) { // 等待接收缓冲区非空 while (!(USART1->ISR & USART_ISR_RXNE)) ; // 读取接收到的字符 return USART1->RDR; } int main(void) { UART_Init(); while (1) { char receivedChar = UART_ReceiveChar(); UART_SendChar(receivedChar); } } ``` 请注意,上述示例代码仅演示了如何使用USART1作为UART通信接口,您可以根据需要修改和扩展代码来适应其他外设实例和功能。同时,请参考STM32G030的数据手册和外设的参考手册,以了解更多关于Instance的详细信息和配置方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值