STM32 下的库函数和寄存器操作比较

发布者:SereneDreams最新更新时间:2018-08-26 来源: eefocus关键字:STM32  库函数  和寄存器操作 手机看文章 扫描二维码
随时随地手机看文章

以 led闪烁中的flashLed函数例子:


库函数操作简单,但是效率不如寄存器操作的高;

寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高


/**下面是通过直接操作库函数的方式实现IO控制**/

while(1)

{

GPIO_ResetBits(GPIOB,GPIO_Pin_9);  //LED0对应引脚GPIOF.9拉低,亮  等同LED0=0;

GPIO_SetBits(GPIOB,GPIO_Pin_10);   //LED1对应引脚GPIOF.10拉高,灭 等同LED1=1;

delay_ms(500);     //延时300ms

GPIO_SetBits(GPIOB,GPIO_Pin_9);   //LED0对应引脚GPIOF.0拉高,灭  等同LED0=1;

GPIO_ResetBits(GPIOB,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉低,亮 等同LED1=0;

delay_ms(500);                     //延时300ms

}


/**

*******************下面注释掉的代码是通过 位带 操作实现IO口控制**************************************/

int main(void)

 

delay_init(168);  //初始化延时函数

LED_Init();        //初始化LED端口

  while(1)

{

     LED0=0;  //LED0亮

  LED1=1; //LED1灭

delay_ms(500);

LED0=1; //LED0灭

LED1=0; //LED1亮

delay_ms(500);

}

}

/**************************************************************************************************

 **/

/**

*******************下面注释掉的代码是通过 直接操作寄存器 方式实现IO口控制**************************************/

int main(void)

 

delay_init(168);  //初始化延时函数

LED_Init();        //初始化LED端口

while(1)

{

     GPIOF->BSRRH=GPIO_Pin_9;//LED0亮

  GPIOF->BSRRL=GPIO_Pin_10;//LED1灭

delay_ms(500);

     GPIOF->BSRRL=GPIO_Pin_9;//LED0灭

  GPIOF->BSRRH=GPIO_Pin_10;//LED1亮

delay_ms(500);

 

}

 }  

/**************************************************************************************************

**/


/*我想说我更喜欢这样的,呵呵*/

                 while(1) 

{  

//FlashLED();  

*(unsigned int*)(0x40010c0c) |=0x200 ;

delay_ms(100); 

*(unsigned int*)(0x40010c0c) &=0xfffffdff ;

delay_ms(100); 

       } 


关键字:STM32  库函数  和寄存器操作 引用地址:STM32 下的库函数和寄存器操作比较

上一篇:STM32库函数和寄存器操作的思考
下一篇:STM32之寄存器访问

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

STM32之Bit banding
【1】Bit banding即位带操作,STM32的寄存器大都为32位,想要修改某个特定位很困难,位带操作即可解决这个问题,它是将寄存器的特定位和bit-band区域的一个32位地址绑定,也就是一对32,你对这个位带区域的32地址赋值即可控制相应位,可赋值范围是0-2的32次方,但这里赋值0和1便足够。 【2】位带操作是硬件支持还是需要软件设置? 硬件支持,只要你能根据公式找到对应地址,你就可以轻松使用位带操作!这里推荐使用宏定义,可以看这里: https://blog.csdn.net/wofreeo/article/details/82255491 【3】位带操作支持所有寄存器吗? 可见包含了
[单片机]
STM32 —— LIN
/* LIN 总线的主要特性有 单主机 多从机概念 基于普通 UART/SCI 接口的低成本硬件实现 低成本软件或作为纯状态机 从机节点不需要石英或陶瓷谐振器可以实现自同步 保证信号传输的延迟时间 低成本的单线设备 速度高达 20kbit/s 总线的通讯由单个主机控制 每个报文帧都用一个分隔信号起始 ,一个同步场和一个标识符场 . 这些都由主机任务发送 从机任务则是发回数据场和校验场 报文路由 报文的内容由识别符命名 识别符不指出报文的目的地 但解释数据的含义 最大的 标识符数量是 64 其中 4 个保留用于专用的通讯 譬如软件升级或诊断 多播 由于引入了报文滤波的概念 任何
[单片机]
STM32——待机唤醒实验
1.STM32待机模式介绍 1.1 STM32低功耗模式介绍 很多单片机具有低功耗模式,比如MSP430、STM8L等,我们的STM32 也不例外。默认情况下,系统复位或上电复位后,微控制器进入运行模 式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不 需继续运行(例如等待外部事件)时,可以利用多种低功耗模式来节省 功耗。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等 条件,选定一个最佳的低功耗模式。 当然在运行模式下,也可以通过如下方式降低功耗: (1)降低系统时钟速度 (2)不使用 APBx 和 AHB 外设时,将对应的外设时钟关闭 STM32 提供了 3 种低功耗模式,以达到不
[单片机]
STM32网络ETH
芯片是:STM32F207VCT6 本人主要介绍STM32F207VCT6的ETH部分,基本是把ETH部分英文翻译一下,加上自己的理解。 1、基础介绍 通过DMA控制器进行介质访问控制 这部分内容应用于STM32F20X和STM32F21系列,其他的 不适用 28.1 以太网简介 部分版权 2004 2005 新思科技(美国公司)。所有权利保留,使用需要认可。 借助STM32F20X和STM32F21的以太网外设可接受和发送数据按照IEE 802.3-2002标准 以太网提供一个完整的、灵活的外设去满足不同应用和要求。它支持与外部相连(PHY)的两个标准的工业接口:默认情况使用在IEEE802.3规范找中定义
[单片机]
<font color='red'>STM32</font>网络ETH
STM32部分知识之SPI原理与配置
SPI接口简介:(同样是基于正点原子F4) SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 PI接口框图 SPI内部结构简明图 SPI接口一般使用4条线通信: MISO 主设备数据输入,从设备数据输出。 MOSI 主设备数据输出,从设备数据输入。
[单片机]
<font color='red'>STM32</font>部分知识之SPI原理与配置
STM32的ADC简介_DMA方式的程序设计与实现
ADC简介: ADC(Analog-to-Digital Converter,模/ 数转换器)。也就是将模拟信号转换为数字信号进行处理,在存储或传输时,模数转换器几乎必不可少。 STM32在片上集成的ADC外设非常强大,我使用的奋斗开发板是STM32F103VET6,属于增强型的CPU,它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次,连续,扫描或间断模式执行,ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 ADC工作过程分析: 我们以ADC规则通道转换过程来分析,如上图,所有的器件都是围绕中间的模拟至数字转换器部分展开的。它的左端VREF+,VREF- 等ADC参考电压,ADCx
[单片机]
<font color='red'>STM32</font>的ADC简介_DMA方式的程序设计与实现
STM32】keil MDK下重定向printf到串口(基于STM32CubeMX)
概述 在keil MDK环境下重定向printf与keil C51不同,由于本人使用了STM32CubeMX生成工程模板,HAL_USART_Transmit函数即是模板里串口输出的函数。由于printf最终是调用fputc输出数据,fputc是一个弱引用(weak)函数,覆写即可重定向printf。 代码清单 extern USART_HandleTypeDef husart1; int fputc(int ch, FILE *f) { HAL_USART_Transmit(&husart1, (uint8_t *)&ch, 1, 0xFFFF); return ch; } STM32CubeMX STM32Cube
[单片机]
基于STM32实现串口的两个分案解析
首先总结一下串口232,422,485 串口232:可双向传输,全双工,最大速率20Kbps,负逻辑电平,-15V~-3V逻辑“1”,+3V~+15V逻辑“0”。 串口422:可双向传输,4线全双工,2线单工。 串口485:可双向传输,4线全双工,2线单工,最大速率10Mb/s,差分信号,发送端:+2V~+6V逻辑“1”,-2V~-6V逻辑“0”,接收端:+200mV逻辑“1”,-200mV逻辑“0”。 对于串口的实现有以两个方案: 方案一,和原子的《例说STM32》一样,首先接收,然后处理,没有消息验证处理,这样就会出现消息覆盖,消息出错后死机,无法明确区分命令,无法及时应答握手信号。方案二,借鉴uC/OSII的消息队列,进
[单片机]
基于<font color='red'>STM32</font>实现串口的两个分案解析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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