STM32库函数中assert_param语句的用法解析-控制/MCU-飞外网

使用STM32库函数的时候,你会发现带参数的库函数前面都有assert_param语句。

例如我们随便看一个库函数,如下所示:

这个函数是3.5版本库函数stm32f10x_TIm.c中的定时器复位函数。

assert_param语句的作用?

assert_param语句是用于程序开发的时候,调试用的检测语句。默认是不开启的,你可以无视它的存在。但是,当你在调试程序的时候,可以打开这个检测机制,调试完了再关闭。

怎么使assert_param起作用?

查看assert_param的定义,位于stm32f10x_conf.h文件,你会发现它实际上是个宏,看它的条件编译语句,你会发现,把USE_FULL_ASSERT定义后,即可打开assert_param这个参数检测机制。USE_FULL_ASSERT这个宏定义已经在文件中隐掉,我们把它的注释符号去掉即可。

看上图中第59行代码,是个条件编译语句,意思是:如果定义了USE_FULL_ASSERT,就把assert_param定义为一个三目运算的结构(第68行),否则(第71行),就把assert_param定义成((void)0)(第72行)。也就是说,你只有定义了USE_FULL_ASSERT,assert_param才会起作用,这个作用就是通过一个三目运算结构(如下)来判断的。关于三目运算的基础知识,请看http://www.raTIonmcu.com/clang/382.html

#defineassert_param(expr)((expr)?(void)0:assert_failed((uint8_t*)__FILE__,__LINE__))

assert_param语句的作用是检测函数的参数是否符合该函数的要求,例如上面的函数中的参数就是TIMx,我们找到IS_TIM_ALL_PERIPH这个定义,可以看到TIMx中的x的范围是1~17,也就是说,你要是把函数写成TIM_DeInit(TIM1);assert_param的结果就是(void)0,如果你把函数写成TIM_DeInit(TIM18);就会调用assert_failed函数。

#defineIS_TIM_ALL_PERIPH(PERIPH)(((PERIPH)==TIM1)||\((PERIPH)==TIM2)||\((PERIPH)==TIM3)||\((PERIPH)==TIM4)||\((PERIPH)==TIM5)||\((PERIPH)==TIM6)||\((PERIPH)==TIM7)||\((PERIPH)==TIM8)||\((PERIPH)==TIM9)||\((PERIPH)==TIM10)||\((PERIPH)==TIM11)||\((PERIPH)==TIM12)||\((PERIPH)==TIM13)||\((PERIPH)==TIM14)||\((PERIPH)==TIM15)||\((PERIPH)==TIM16)||\((PERIPH)==TIM17))

assert_failed函数怎么写?

如上,当你定义了USE_FULL_ASSET之后,你立即编译,编译器会报错,提示assert_failed函数没有定义。我们把assert_failed这个函数放到mian.c文件中,如下定义:

voidassert_failed(uint8_t*file,uint32_tline){printf(“Wrongparametersvalue:file%sonline%d\r\n”,file,line);while(1);}

上面函数的意思就是,如果参数出错,输出出错的文件名称和行号。结果是输出到串口,用串口调试助手可以看到输出结果。注意,编译器Build Output栏是不会报错的。

下面给出一个例程,故意写错参数,通过STM32串口1把错误参数的文件名称和行数发到串口,你打开串口调试助手即可看到结果。


STM32库函数SystemInit()详解STM32单片机应用非常广泛,官方提供了标准的接口库,用户可以不用直接操作寄存器,只需要调用接口函数就可以了。2022-02-08 15:20:441跑马灯实验——库函数h一、硬件连接LED0PA8LED1PD2选择GPIO输出方式:推挽输出:可以输出强高低电平二、库函数介绍组介绍1.组 USER 下面存放的主要是用户代码。 system_stm32f10x.c 里面2022-01-18 11:22:371STM32库函数开发-GPIO2021-01-11 学习日志STM32f1库函数开发学习实战一 · I/O口1. 文件夹结构2. 配置细节 · 从寄存器到库函数3. 跑马灯4. 按键输入STM32f1库函数开发学习“追毛求疵2022-01-13 16:17:004STM32库函数文件结构说明整理STM32F1精英版(芯片型号:STM32F103ZET6)常见问题解答:1.正点原子里标准例程分为寄存器,库函数和HAL库,这些都是什么区别?解答:寄存器的例程中就是直接对硬件的寄存器进行操作,类似51的开发。举个例子:RCC- APB2ENR|=1 3;RCC- APB2E2022-01-13 16:08:491STM32超低功耗进阶之电源管理库函数(二)一,电源管理库函数前面的入门文章对 STM32 的超低功耗的做了使用介绍,当然在使用超低功耗的时候还会考虑 RAM 的数据会不会丢失,什么时候重写 备份寄存器,进入低功耗模式的时候要怎么保持 IO2022-01-11 11:30:3202021-04-17 STM32串口寄存器库函数配置STM32串口寄存器库函数配置方法STM32常用寄存器和库函数串口配置一般步骤(串口实例)常用的串口相关寄存器:USART_SR状态寄存器USART_DR数据寄存器USART_BRR波特率寄存器2021-12-28 19:13:592基于标准库函数与基于HAL库函数的stm32编程方式对比以实例程序(串口通信),分析基于标准库函数与基于HAL库函数的stm32编程方式的差异一、基于标准库函数的stm32编程方式二、基于HAL库函数的stm32编程方式差异三、stdunio IDE试玩2021-12-28 19:09:1413STM32串口收/发程序--库函数编程前言利用STM32的USART1,实现数据的收/发。本文参照文档为正点原子—库函数版本开发指南、STM32中文参考手册。文章目录前言工具/参考文档stm32 USART寄存器状态寄存器2021-12-28 19:07:525STM32学习笔记(串口+DMA)小焦的STM32学习日志(一)2020.4.20数据位大小与大端小端:实际应用:`assert_param();`函数的理解:串口配合DMA的使用方法回顾:实现平台说明:重要的初始化内容:需要额外2021-12-27 19:22:452STM32入门-STM32时钟系统,时钟初始化配置函数使用库函数编写的LED程序,在system_stm32f10x.c文件中可以找到SystemInit()函数,SystemInit()代码如下:void SystemInit (void2021-12-27 19:07:292STM32入门:STM32F103C8T6库函数工程文件搭建STM32F103C8T6库函数工程文件搭建完成以上操作后,将Output与Listing生成的文件置于OBJ文件夹中,然后修改以下内容即可:2021-12-27 18:54:273关于STM32库函数手动添加时钟问题。在从IAR移植到KEIL过程中(IAR库函数使用V2.0.3keil库函数使用V3.5.0),发现串口的数据一直接收不到,串口的配置全部完成,所以怀疑库对时钟的设置有问题。自从用了keil5以后很少2021-12-27 18:46:490stm32运用freertos库函数测试各个线程任务信息和cpu占用率通过对工程中各个线程任务的分析,以便进行任务代码的优化或者更换主处理芯片。仅为记录,欢迎大佬指出错误。如有帮助,十分荣幸。我的mcu是stm32f405,frertos,标准库函数。cpu占用率2021-12-14 18:58:010stm32下标准库函数与HAL库函数编程方式的差异stm32下标准库函数与HAL库函数编程方式的差异标准库函数HAL库函数标准库函数与HAL库函数代码对比总结标准库函数由于寄存器开发难度很大,因此ST公司就专门编写了芯片的库函数(固件库),将一些2021-12-09 14:21:067STM32F103 库函数写外部中断时程序卡死,追踪运行卡死在启动文件.s的 B.中解决办法,实测OK,供参考STM32F103 库函数写外部中断时程序卡死,追踪运行卡死在启动文件.s的 B.中解决办法,实测OK,供参考2021-12-08 12:21:1110【STM32】标准库与HAL库对照学习教程三--使用库函数配置GPIO点亮LED灯【STM32】标准库与HAL库对照学习教程三--使用库函数配置GPIO点亮LED灯一、前言二、准备工作三、LED硬件电路四、使用标准库工程点亮LED灯1、GPIO初始化一般步骤2、GPIO标准库函数2021-12-05 14:06:047STM32 NVIC相关库函数解析 NVIC_PriorityGroup){ /* Check the parameters */ assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup)); /* Set the PRIGROUP[10:8] bits according to NVIC_2021-12-04 20:36:096STM32HAL库函数STM32HAL库概述本文本是我对我自己平日里使用STM32的总结,结合了网上和自己的理解,方便自己以后回顾学习。只包含在学习过程有用到的。1.GPIO(1)HAL_GPIO_DeInit功能:这个2021-12-04 18:06:0553IAR中将部分文件编译成库函数.a及如何调用库函数目的:将库函数提供给第三方,但有不想让别人得到源代码。目的:将库函数提供给第三方,但有不想让别人得到源代码。一、如何将文件编译成静态连接库.a二、如何在项目中引入静态连接库...2021-12-03 11:36:067STM32 串口使用IDLE中断+DMA接收(HAL库函数)STM32 串口使用IDLE中断+DMA接收(HAL库函数)一、开发环境单片机型号:STM32H743IIT6工程配置环境:STM32CubeMX 6.3.0固件库:STM322021-12-02 21:06:0713从自定义的库函数到STM32官方标准库  在上一节的基础上,进一步改写代码,再引入官方标注库函数。虽然官方标准库慢慢式微,有一些别的库可能会取代它,但是并不妨碍我们继续拿官方库来写代码,吸取里边好的写法,强化下C语言技能,加深对寄存器2021-12-02 20:06:101建立Stm32F103库函数工程(包含正点原子库函数工程模板)--STM32名命规则、仿真设置、利用寄存器地址操控st包含了许多的配置文件和库函数需要添加。同时还要设置一些选项,这篇文章就从零建立一个STM32的工程。C51单片机是一个结构较为简单的MCU,也是许多人第一款入手学习的单片机。文章目录前言准备工作STM32概述简介:stmf10x系列名命规则库函数工程建立工2021-11-19 13:51:0611STM32F1开发指南-库函数版本_V3.3(下)STM32F1开发指南-库函数版本_V3.3(下)2021-09-27 17:46:1123STM32F1开发指南-库函数版本_V3.3(上)STM32F1开发指南-库函数版本_V3.3(上)2021-09-27 17:44:0914STM32单片机不完全手册之库函数版本STM32单片机不完全手册之库函数版本2021-07-26 21:30:139stm32中的io函数 STM32中的IO操作STM32系列单片机芯片的库函数有很多种,而负责IO操作的库函数是GPIO,GPIO函数在STM32单片机头文件stm32f10x_gpio.h中声明,在STM32单片机的主函数stm32f10x_gpio.c中完成定义。2021-07-22 16:17:444777STM32单片机常用库函数 STM32单片机系统作用和RAM存储器 3、可变静态存储器(FSMC 4、嵌套矢量中断控制器(NVIC) 5、外部中断/事件控制器(EXTI) 6、时钟和启动 7、Boot模式 STM32单片机常用库函数 1.GPIO初始化2021-07-22 14:39:141594verilog中的initial语句说明解释verilog HDL中的initial语句的用法。2021-05-30 13:31:030STM32F4 HAL库函数说明STM32F4 HAL库函数说明2021-05-26 08:45:5918STM32的标准例程库函数资料合集免费本文档的主要内容详细介绍的是STM32的标准例程库函数资料合集免费。2020-12-26 11:03:0612如何得当使用C语言的特殊的用法、__LINE__的代码。 标准外设库位于stm32fxxx_conf.h文件: #define assert_param(expr) ((expr) ? (void)0 : assert2020-09-27 10:44:341017STM32 V3.5固件库函数调用说明中文版免费本文档的主要内容详细介绍的是STM32 V3.5固件库函数调用说明中文版免费。2020-01-19 13:17:0747STM32 IAR的库函数资料免费本文档的主要内容详细介绍的是STM32 IAR的库函数资料免费。2020-03-27 10:37:2221老司机带你深入理解ST库中的 assert_param 语句老司机带你深入理解ST库中的assert_param语句2020-01-09 10:41:491919怎么理解Assert中的断言语句?为什么项目中的代码需要有Assert断言语句?2020-01-09 10:15:431500STM32库函数代码自动生成器V1.2应用程序免费本文档的主要内容详细介绍的是STM32库函数代码自动生成器V1.2应用程序免费。2019-10-24 17:35:4023SQL的经典语句用法详细说明本文档的主要内容详细介绍的是SQL的经典语句用法详细说明资料免费2019-10-22 16:20:211STM32F10X库函数合集免费本文档的主要内容详细介绍的是STM32F10x库函数合集免费。2019-10-15 09:26:0225STM32库函数和寄存器应该如何操作从开始接触51单片机,到现在开始转型学习功能更加强大的STM32f407系列,学习过程中引入了库函数及相应操作,当时赶着进度做点东西出来,有点不求甚解。现在返回来求索:相比于原来51单片机的寄存器2019-04-23 17:26:170Alientek MiniSTM32开发板例程库函数版本资料合集免费本文档的主要内容详细介绍的是Alientek Ministm32开发板例程库函数版本资料合集免费包括了:2019-05-09 15:27:589STM32库函数代码自动生成器V1.3应用程序免费本文档的主要内容详细介绍的是STM32库函数代码自动生成器V1.3应用程序免费。2019-03-03 21:10:0165STM32进行多路分时ADC和串口显示及液晶屏显示的库函数资料免费本文档的主要内容详细介绍的是STM32单片机进行多路分时ADC和串口显示及液晶屏显示的库函数资料免费,主要用于STM32的调试,适合新手。2018-12-29 11:50:3215STM32单片机的断言机制函数assert_param解析这个宏定义的作用就是检查参数PERIPH,判断参数PERIPH是否为GPIOX(A.。.G)基址中的一个,只要有一个为真则其值为真,否则为假,不用多说,这是C语言中基本的逻辑运算。2018-11-30 16:15:352973基于STM32单片机通过使用宏assert_param来实现运行时间检测固件函数库通过检查库函书的输入来实现运行时间错误侦测。通过使用宏assert_param来实现运行时间检测。所有要求输入参数的函数都使用这个宏。它可以检查输入参数是否在允许的范围之内。2018-10-22 15:17:31794STM32库函数代码自动生成器正式版应用程序免费本文档的主要内容详细介绍的是STM32库函数代码自动生成器正式版应用程序免费。2018-10-17 16:48:1959如何创建STM32库函数的工程模板的详细资料免费本章将向大家介绍如何创建库函数工程模板,为后面基于库函数程序的开发提供方便。学习本章可以参考“STM32 固件库介绍”章节内容,如不喜欢看文档的朋友可以看视频,不喜欢看视频的朋友可以看文档。2018-09-29 22:58:2711基于单片机STM32 GPIO 基本简单操作函数教程STM32库函数太多,而且不能识别大小写,经常记错,GPIO简单记忆。---第一步--模式配置void GPIO_Config(void){GPIO_InitTypeDef2018-08-21 00:33:012085STM32f103zet6使用库函数点亮一个LEDSTM32f103zet6使用库函数点亮一个LED2018-05-21 22:38:2690基于Python 函数基础、参数以及高级用法的解析简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行。Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语句通过一个函数名称来调用。2018-02-01 15:56:353730基于STM32的三种库函数代码效率对比解析ST已经推出了三种库函数,以方便客户快速开发STM32系列MCU。从最早的标准外设驱动库,到后来的Cube HAL,再到Cube LL以及直接操作寄存器。这几种库的代码效率到底如何呢?本文将针对这个问题进行粗略分析,并提供对比数据供大家参考。2017-11-05 23:52:2212464基于C语言标准库函数基于C语言标准库函数2017-10-23 17:44:12803 底层库函数03 底层库函数2017-10-11 09:49:327stm32f2xx固件库手册详细介绍了stm32f2xx的库函数及使用方法stm32f2xx固件库手册详细介绍了stm32f2xx的库函数及使用方法2017-09-21 14:03:44260STM32的函数说明(中文)STM32官方库函数中文说明2017-02-28 21:52:4678CAN库函数程序CAN库函数程序2017-02-23 12:07:0616STM32不完全手册_库函数版本_V3.1STM32不完全手册_库函数版本_V3.12016-11-06 23:29:18119PICC编译器的库函数详解本章将详细列出PICC编译器的库函数。每个函数均从函数名开始,然后按照以下几个标题给出详细解释。2016-09-29 11:55:292OSTaskSuspend用法与描述本文为您解析uCosii微控制系统函数OSTaskSuspend用法及相关描述。2016-09-06 17:30:185031STM32库函数代码自动生成器V2015可以很好的配置常用的库函数参数,非常方便2016-08-12 11:24:5910PID库函数如题,arduino的库函数,摘自GitHub,本人就是用这个做小车的,挺好理解的2016-07-25 08:23:214STM32库函数代码自动生成器正式版STM32库函数代码自动生成器正式版 STM32库函数代码自动生成器正式版2016-07-22 16:08:3934ALIENTEK MiniSTM32开发板例程-库函数版本ALIENTEK MiniSTM32开发板例程-库函数版本—1-27个实验例程。2016-07-22 13:46:3613ALIENTEK MiniSTM32开发板例程(库函数版本)ALIENTEK MiniSTM32开发板例程(库函数版本)_标准例程+扩展例程。2016-07-22 13:46:4512STM32库函数代码自动生成器正式版STM32库函数代码自动生成器正式版,感兴趣的可以看看。2016-07-08 11:54:2219STC库函数使用参考STC库函数使用参考STC库函数使用参考2016-06-29 23:18:3429STM32库函数代码自动生成器V1.2stm32库函数代码自动生成器是STM32学习的小工具。stm32库函数代码自动生成器可以根据你的配置生成相应的库函数代码。2016-06-16 21:48:035cornerHarris函数用法示例《OpenCV3编程入门》书本配套源代码cornerHarris函数用法示例2016-05-31 22:19:015bilateralFilter函数用法示例《OpenCV3编程入门》书本配套源代码bilateralFilter函数用法示例2016-05-31 22:19:015canny函数用法示例《OpenCV3编程入门》书本配套源代码canny函数用法示例2016-05-31 22:19:023printf函数用法示例《OpenCV3编程入门》书本配套源代码:printf函数用法示例2016-05-31 22:20:389HoughLines函数用法示例《OpenCV3编程入门》书本配套源代码:HoughLines函数用法示例2016-05-31 22:20:382MedianBlur函数用法示例《OpenCV3编程入门》书本配套源代码:MedianBlur函数用法示例2016-05-31 22:20:3813HoughCircles函数用法示例《OpenCV3编程入门》书本配套源代码:HoughCircles函数用法示例2016-05-31 22:20:386GaussianBlur函数用法示例《OpenCV3编程入门》书本配套源代码:GaussianBlur函数用法示例2016-05-31 22:20:385HoughLinesP函数用法示例《OpenCV3编程入门》书本配套源代码:HoughLinesP函数用法示例2016-05-31 22:20:382Laplacian函数用法示例《OpenCV3编程入门》书本配套源代码:Laplacian函数用法示例2016-05-31 22:20:393resize函数用法示例《OpenCV3编程入门》书本配套源代码:resize函数用法示例2016-05-31 22:22:471remap函数用法示例《OpenCV3编程入门》书本配套源代码:remap函数用法示例2016-05-31 22:22:472sobel函数用法示例《OpenCV3编程入门》书本配套源代码:sobel函数用法示例2016-05-31 22:22:481pyrUp函数用法示例《OpenCV3编程入门》书本配套源代码:pyrUp函数用法示例2016-05-31 22:22:481pyrDown函数用法示例《OpenCV3编程入门》书本配套源代码:pyrDown函数用法示例2016-05-31 22:22:4816Scharr函数用法示例《OpenCV3编程入门》书本配套源代码:Scharr函数用法示例2016-05-31 22:22:4814blur函数用法示例《OpenCV3编程入门》书本配套源代码blur函数用法示例2016-05-31 22:19:011floodFill函数用法示例《OpenCV3编程入门》书本配套源代码floodFill函数用法示例2016-05-31 22:19:012dilate函数用法示例《OpenCV3编程入门》书本配套源代码dilate函数用法示例2016-05-31 22:19:012erode函数用法示例《OpenCV3编程入门》书本配套源代码erode函数用法示例2016-05-31 22:19:011boxFilter函数用法示例《OpenCV3编程入门》书本配套源代码boxFilter函数用法示例2016-05-31 22:19:012STM32开发指南V1.0 库函数版本1《STM32开发指南V1.0 库函数版本》完美标签part12016-05-27 23:16:5470STM32开发指南V1.0 库函数版本2《STM32开发指南V1.0 库函数版本》完美标签part22016-05-27 23:17:5434stm32库函数解释库函数的详细介绍,很实用,本人菜鸟,正在慢慢学习。2016-04-18 20:43:553STM32F103固件函数库-中文个人使用的STM32 3.5固件库函数文件。很实用,STM32开发必备参考资料。2016-03-04 17:00:1945STM32库函数—点灯实验_实验三概述:从最简单的“点灯”实验入手,涉及到STM32的最基础最简单的操作。实验目的:本实验的目的很简单,就是让LED亮起来,并闪烁。通过实验了解STM32固件函数库的使用方法。本实验用到以下4个库函数(省略了参数):(后面将详细介绍函数作用及用法)2016-01-31 22:25:2111树莓派_库函数安装教程树莓派_库函数安装教程,树莓派嵌入式拔高篇,非常适合新手学习2016-01-11 14:50:5128STM32不完全手册-库函数版本_V3.0正点原子开发板STM32不完全手册-库函数版本_V3.0,2010版2015-11-16 11:06:3043STM32F10x库函数帮助手册中文版(CHM格式)STM32FSTM32F10x库函数帮助手册中文版(CHM格式) STM32F10x_StdPeriph_Driver_3.5.02015-11-12 21:03:38477STM32F101xx和STM32F103xx固件函数库STM32F101xx和STM32F103xx固件函数库函数使用说明手册,开发必备工具!2015-10-28 16:21:3054Keil C51库函数参考第五章 Keil C51库函数参考 C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系2011-04-07 09:46:18401MFC中ASSERT常见用法 在C++的消息公告板上经常可以看到出现ASSERT错误的求助信息。虽然这通常是希望消除ASSERT错误的帮助请求,但是几乎所有的求助者都认为ASSERT本身是罪恶的。我完全能理解一2010-09-07 15:55:0719C语言库函数查询工具C语言库函数查询工具2010-03-11 09:12:39225PICC库函数详解PICC库函数详解2006-04-18 20:13:56130