hal库已封装函数
输入输出函数:
阻塞模式:
HAL_I2C_Master_Transmit();
HAL_I2C_Master_Receive();
HAL_I2C_Slave_Transmit();
HAL_I2C_Slave_Receive()
HAL_I2C_Mem_Write();
HAL_I2C_Mem_Read();
HAL_I2C_IsDeviceReady()
带中断非阻塞模式:
HAL_I2C_Master_Transmit_IT();
HAL_I2C_Master_Receive_IT();
HAL_I2C_Slave_Transmit_IT()
HAL_I2C_Slave_Receive_IT();
HAL_I2C_Mem_Write_IT();
HAL_I2C_Mem_Read_IT()
DMA传输非阻塞模式:
HAL_I2C_Master_Transmit_DMA();
HAL_I2C_Master_Receive_DMA();
HAL_I2C_Slave_Transmit_DMA();
HAL_I2C_Slave_Receive_DMA();
HAL_I2C_Mem_Write_DMA();
HAL_I2C_Mem_Read_DMA()
非阻塞模式下的回调函数:
HAL_I2C_MemTxCpltCallback();
HAL_I2C_MemRxCpltCallback();
HAL_I2C_MasterTxCpltCallback()
HAL_I2C_MasterRxCpltCallback();
HAL_I2C_SlaveTxCpltCallback();
HAL_I2C_SlaveRxCpltCallback();
HAL_I2C_ErrorCallback()
这部分可以参照USART中的函数进行理解。
关键字:STM32 HAL库 IIC
引用地址:
STM32--HAL库IIC
推荐阅读最新更新时间:2024-11-11 12:31
STM32串口发送字符串的几种写法
STM32用USART发送字符串 代码含义是: 当接收引脚有数据时,状态寄存器的USART_FLAG_RXNE就会为1,此时USART_GetFlagStatus(USART1,USART_FLAG_RXNE)的返回值就为1(SET),若无数据则为RESET。 代码常见写法,及其接收数据效果 1 这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。 2 这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字
[单片机]
STM32的BootLoader 从SD卡更新固件
1. 前言自从几个月前接触到有Bootloader这回事,就有一种强烈的冲动,想写一个BootLoader出来。很快在飞思卡尔的Cortex-M4单片机上实现,已经是好几个月前的事情了。然后关于BootLoader的事搁在一边好久了,这次弄个STM32的BootLoader出来,Cortex-M3的,顺便发表下博客,跟大家分享一下。 又过了大半年了吧,慢慢对BootLoader的认识也有点长进啦。特别是跟网友讨论后发现BootLoader的实现还是需要靠BootLoader程序和App程序的配合才能正常使用。在这里特别感谢网友cary_yingj ,对本BootLoader的研究后发现App程序需要重定位中断向量表,才能正常工作。
[单片机]
stm32之模拟i2c驱动ht16c22
iic.h文件如下: #ifndef _stm32f103_myi2c_h_ #define _stm32f103_myi2c_h_ //IO方向设置 #define SDA_IN() {GPIOB- CRH&=0XFFFF0FFF;GPIOB- CRH|=8 12;} #define SDA_OUT() {GPIOB- CRH&=0XFFFF0FFF;GPIOB- CRH|=3 12;} //IO操作函数 #define IIC_SCL PBout(10) //SCL #define IIC_SDA PBout(11) //SDA #define READ_SDA PBin(11) //输入SDA //ht16c22
[单片机]
sw笨笨的STM32笔记之十:工作工作,PWM输出
a) 目的:基础PWM输出,以及中断配合应用。输出选用PB1,配置为TIM3_CH4,是目标板的LED6控制脚。 b) 对于简单的PWM输出应用,暂时无需考虑TIM1的高级功能之区别。 c) 初始化函数定义: void TIM_Configuration(void); //定义TIM初始化函数 d) 初始化函数调用: TIM_Configuration(); //TIM初始化函数调用 e) 初始化函数,不同于前面模块,TIM的初始化分为两部分 基本初始化和通道初始化: void TIM_Configuration(void)//TIM初始化函数 { TIM_TimeBaseI
[单片机]
STM32 启动步骤和升级方式以及代码跳转的实现
#!/bin/sh #首先把BOOT0/Boot1 设置为 1 0, 即使用 STM32的ISP升级模式 #按下板子的reset, 硬复位进入 SYS ISP 模式(BOOTLOADER) #sudo stm32flash -w F407ZG_New.bin -v -g 0x0 /dev/ttyUSB0 sudo stm32flash -w F407ZG_Old.bin -v -g 0x0 /dev/ttyUSB0 #烧写以及验证完毕后, 自动加载 Flash的程序运行。 #把把BOOT0/Boot1 设置为 0 0, 即使用 STM32的flash模式,即用户程序模式。 #reset按键, 硬复位后自动启动新烧入的程
[单片机]
STM32学习笔记--按键输入实验
//按键初始化函数 //特别注意:在该函数之后,JTAG将无法使用(SWD也无法使用) //如果想JTAG仿真,可以屏蔽该函数。 //PA0.13.15 设置成输入 void KEY_Init(void) { RCC- APB2ENR|=1 2; //使能PORTA时钟 GPIOA- CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOA- CRL|=0X00000008; GPIOA- CRH&=0X0F0FFFFF;//PA13,15设置成输入 GPIOA- CRH|=0X80800000; GPIOA- ODR|=1 13; //PA13上拉,PA0默认下拉 GPIOA- ODR|=1 15; //
[单片机]
【STM32】STM32驱动 LCD12864程序代码(串行方式)
引言: 这里我们只讲解接线和代码实现,具体的原理在上一篇博客中已经讲解,如果想了解具体原理可以查看上一篇博客 《STM32 LCD12864 串行通信模式 (从原理让你理解)》 下方代码的实现也是基于上一篇的讲解顺序来的 设备: STM32F407ZGT6 引脚接线: VSS——GND VDD——VCC(5V or 3.3V) V0 亮度调节 不接 CS ——接VCC,持续高电平,一直选通。 SID ——接PE1 SCLK ——接PE0 PSB——接GND 串行模式 或者飞线与1脚相连 BLA——VCC(5V or 3.3V) 或者飞线与2脚相连 BLK——
[单片机]
新唐M051 IIC使用程序
发一个新唐M051单片机的 IIC使用的程序: #include "SmartM_M0.h" #define DEBUGMSG printf #define EEPROM_SLA 0xA0 #define EEPROM_WR 0x00 #define EEPROM_RD 0x01 #define I2C_CLOCK 13 #define PAGE_SIZE 8 /***************************************** *函数名称:Timed_Write_Cycle *输 入:无 *输 出:无 *功 能:同步的写周期 *
[单片机]