页面加载中,请稍候
来源:巧学模电数电单片机发布时间:2023-05-241622浏览
询问 AIC语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识,希望能对大家有所帮助。
01
SysTick->CTRL |= 1 << 1;这个操作就是将CTRL寄存器的第1位(从0开始算起)设置为1,为什么要通过左移而不是直接设置一个固定的值呢?SysTick->CTRL |= 0X0002;这个虽然也能实现同样的效果,但是可读性稍差,而且修改也比较麻烦。SysTick->CTRL &= ~(1 << 0) ; /* 关闭SYSTICK */该代码可以解读为:仅设置CTRL寄存器的第0位(最低位)为0,其他位的值保持不变。SysTick->CTRL &= 0XFFFFFFFE; /* 关闭SYSTICK */可见,前者的可读性及可维护性都要比后者好很多。GPIOB->ODR ^= 1 << 5;执行一次该代码,就会使PB5的输出状态翻转一次,如果我们的LED接在PB5上,就可以看到LED闪烁了。02
03
#ifdef 标识符 程序段1#else 程序段2#endif它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。#ifdef 程序段1 #endif条件编译在HAL库里面是用得很多,在stm32mp1xx_hal_conf.h这个头文件中经常会看到这样的语句:
#if !defined (HSE_VALUE) #define HSE_VALUE 24000000U #endif如果没有定义HSE_VALUE这个宏,则定义HSE_VALUE宏,并且HSE_VALUE的值为24000000U。条件编译也是C语言的基础知识吧。04
extern uint16_t g_usart_rx_sta;这个语句是申明g_usart_rx_sta变量在其他文件中已经定义了,在这里要使用到。 uint16_t g_usart_rx_sta;extern的使用比较简单,但是也会经常用到,需要掌握。05
struct _GPIO { __IO uint32_t CRL; __IO uint32_t CRH; …};定义了一个结构体GPIO,这样我们定义结构体变量的方式为:
struct _GPIO gpiox; /* 定义结构体变量gpiox */但这样很繁琐,HAL库中有很多这样的结构体变量需要定义。typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; … } GPIO_TypeDef;Typedef为结构体定义一个别名GPIO_TypeDef,这样我们可以通过GPIO_TypeDef来定义结构体变量:GPIO_TypeDef gpiox;
这里的GPIO_TypeDef就跟struct _GPIO是等同的作用了,但是GPIO_TypeDef使用起来方便很多。
新闻来源:巧学模电数电单片机,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!

2026-07-04

2026-06-18