STM32固件库中assert_param的作用

发布者:Jinyu521最新更新时间:2017-11-07 来源: eefocus关键字:STM32  固件库中assert_param 手机看文章 扫描二维码
随时随地手机看文章

在学习stm32库函数过程中,笔者遇到大量的assert_param语句。经查明,assert_param的作用就是用来判断传递给函数的参数是否是有效值。

 

以下是从固件库中复制粘贴的:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
 
  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    RCC->APB2ENR |= RCC_APB2Periph;
  }
  else
  {
    RCC->APB2ENR &= ~RCC_APB2Periph;
  }
}

笔者用keil中的鼠标右键“go to definition xxxxxx""

查看assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));语句中IS_RCC_APB2_PERIPH的定义,得到如下结果:

 


#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)

#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))

 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

以这个函数为例:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph,

FunctionalState

NewState)的作用就是使能APB2外设时钟,而当我们调用这个函数的时候,所给它的参数必须是以上规定的几个数值中的一个,不可随意填一个未定义的值进去。assert_param()函数有效的解决了这个问题,它在函数运行之初,便判断工程师所给的值是否为这个函数的有效值,以达到纠错报错的功能。同时,当我们不知道这个函数该填入什么样的值的时候,就可以使用keil中提供的右键“go

to definition xxxx"查看assert_param()括号中的定义。


关键字:STM32  固件库中assert_param 引用地址:STM32固件库中assert_param的作用

上一篇:SPI通信协议—STM32f1学习笔记
下一篇:STM32和NRF24L01实现无线传输

推荐阅读最新更新时间:2024-03-16 15:43

基于STM32设计的指针式电子钟与日历
1. 项目简介 这是基于STM32设计的一个指针式电子钟+万年历小项目,采用3.5寸的LCD屏显示时钟,日历、温度、天气,支持触摸屏调整设置时间,设置闹钟,查看日历等等。整体项目主要是技术点就是LCD屏的图形绘制。比如: 时钟的时针绘制、分针、秒针、表盘、日历绘制等等。 时钟的时间是直接采用STM32本身的RTC时钟,室内的室温数据采用DS18B20温度传感器获取,STM32芯片的具体型号是STM32F103ZET6,只要是STM32F1系列的开发板,代码都是可以通用的 LCD显示屏采用的正点原子的3.5寸TFT显示屏,支持8080时序,自带触摸屏功能,触摸屏是电阻屏,驱动芯片是XPT2046,SPI接口,通信非常方便。
[单片机]
基于<font color='red'>STM32</font>设计的指针式电子钟与日历
关于初学STM32中肯的几点建议
通过观察后台提问的内容来看,关注我的人中STM32初学者占大部分,而且大多处于小白阶段。所以,今天暂且写下几点内容给这些朋友。 1查找资料去官网 许多初学者总是在问:能给我一份xxx手册吗?你有关于xxx的资料吗?同时,我也常在某些“技术群”里看到类似这种“给资料”的对话。 这样说吧,你们向别人获取的“资料”,别人基本上也是从官网下载而来的。而且,别人给你的资料不一定是最新版本。 因此,建议初学者查找资料,寻找资料尽量找官方原版资料,毕竟官方的才具有权威性。 STM32官方整理的资料很多,而且针对每一种型号的MCU都有各种资料。夸一点的说:你想要的都有。 针对你MCU芯片型号,进入对应的网址即可(具体这里就不说过程了): ht
[单片机]
stm32入门开发板选野火还是正点原子
两个可以说都是行业标杆。 不能说哪个比哪个更好,各有特色,适合自己就是最好的,同行之间都是相互参考去做的。 我从以下几个维度来对比下: 1.教程 2.代码 3.开发板价格 4.进阶 一、教程 两家教程都是完全开源的,大家对野火的教程好评比较多,开始几章由浅到深讲解地很好。 有些c基础不是很好的人也能跟上,能理解STM32的外设使用底层也是从寄存器配置进行代码二次封装来的。 后面一些章节似乎换了老师,讲解地更加偏向实际项目,站在初学者的角度,或许听起来有点费劲,但死磕也能学到不少东西。 正点原子的话正好相反,刚开始的几个章节可能对新手不是很友好,反而后半段更适合初学者。 对于初学者来说,其实不需要讲的多深入,最重要是能让
[单片机]
STM32 基础系列教程 24 - USB_HID_key
前言 学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如
[单片机]
<font color='red'>STM32</font> 基础系列教程 24 - USB_HID_key
STM32实战一 初识单片机
一直用PLC搞智能控制,最近研发新产品,因为控制点太多,想改用单片机,一阵某度之后,选用STM32,功能足够。开始想自己设计电路,很久没有Altium了,水平本来也不高,放弃了。从宝宝上买了一块开发板STM32F103VET6(单片机主体),一个ST-LINK仿真器(下载和调试程序),一些杜邦线(各种公母头),一些发光管(实际没有用上),开始奇妙的单片机旅程。 与客服联系,要了好多资料,客服不是很专业,不能回答技术问题,简单的安装和使用还行,专业问题要在工作时间找技术支持。一共有3G多的资料,首先安装驱动和软件。 ST-LINK+V2++WIN10+驱动.zip 这是WIN10的驱动。首先安装这个。 mdk472
[单片机]
<font color='red'>STM32</font>实战一 初识单片机
如何基于标准库构建STM32工程
本文将以STM32F10x为例,对标准库开发进行概览。主要分为三块内容: STM32系统结构 寄存器 通过点灯案例,详解如何基于标准库构建STM32工程 STM32系统结构 上图,STM32f10xxx系统结构。 内核IP 从结构框图上看,Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:指令存储区总线(两条)、系统总线、私有外设总线。有两条代码存储区总线负责对代码存储区(即 FLASH 外设)的访问,分别是I-Code 总线和D-Code 总线。 I-Code用于取指,D-Code用于查表等操作,它们按最佳执行速度进行优化。 系统总线(System)用于访问内存和外设,覆盖
[单片机]
如何基于标准库构建<font color='red'>STM32</font>工程
STM32笔记(一)---串口ISP模式下载原理
-------------------------- –串口ISP模式下载原理– -------------------------- 先放几张火哥的教程截图: 图1 图2 图3 图4 通过图1可以了解到,不同的下载方式中所需要的不同启动模式: 在项目实际应用中的Boot设置: 默认使用程序代码存储在主闪存存储器,配置方式:BOOT0=0,BOOT1=0,但是要预留boot0上拉电阻工位,便于将其电平拉高,实现串口烧录。 如图3所示,只需要通过改变RTS电位使S8550是否导通,导通时实现图2的电路效果将Boot0拉高,否则Boot0为低电位。 一旦完成Boot0与Boot1的10设置后,需要
[单片机]
<font color='red'>STM32</font>笔记(一)---串口ISP模式下载原理
基于STM32串口通信的实例分析
串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。串口按电气标准及协议来划分,包括RS-232-C、RS-422、RS485等。 在串行通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。串行通信的数据是逐位传输的,发送方发送的每一位都具有固定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。不仅如此,接收方还必须能够确定一个信息组的开始和结束。 常用的两种基本串行通信方式包括同步通信和异步通信
[单片机]
基于<font color='red'>STM32</font><font color='red'>中</font>串口通信的实例分析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved