在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → STM32硬件中断收发I2C数据

STM32硬件中断收发I2C数据

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:1.36M
  • 下载次数:19
  • 浏览次数:229
  • 发布时间:2020-08-19
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
stm32使用硬件中断读写i2c设备,给出详细代码,实际使用ok
void UsageFault_ Handler( void /*k Gio to infinite loop when [sage Fanlt exception occurs*/ while (1) * @brief This function handles SVCall exception ck @param None (@retval none void syc handler( void) sk@@ brief This function handles Debug Monitor exception s @param None 本@ retval non void DebugMon_handler(void) / s(@brief This function handles pends vc exception param one *k @@retval none void pends v_ Handler( void) ck @@brief This function handles Sys Tick Handler * @@param None ik @@retyal none void SysTick_Handler( void) void I2Cl_Ev_IRQHandler(void) show counter 1 ++ if(show counter > 1000000) show counter=o printf("rin The: 12C.1 L.Vent is %ox IrIn", 12C_GetI astEvent(T2C1)); switch(I2C_GetI astEvent(T2C1)) case i2CEⅤ ENT MASTER MODE SELECT:/发送启始条件 //2C_Send7bitAddress(12C1, I2C2_ ADDRESS, I2C_Direction_Transmitter); 12C- Send 7bit Address(T2C1, T2C2_ ADDRESS, T2C_Direction_Receiver); printf( rAn The I2CI is ready ri): break /*case((2C FLAG RXne OxOf)I(2C_EVENT MASTER MODE SELECT)):// 已发送启始条件 //2C Send7bit Address(2C1, 2C2 ADDRESS, I2C Direction Transmitter) 12C_Send7bitAddress(12C1, I 2C2_ADDRESS, I2C_Direction_ Receiver); printf("r'n The I2CI is ready 2 rIn ) break case I2 C EVENT MASTER TRANSMITTER MODE SELECTED:∥已发送从机 地址 printf("rin The 12CI has send data d rin", I2Cl_ Buffer_ IxIRx_Counter)); I2C_ Send Data(12C1, 2cl Buffer_TxlTx_Counter++D break case i2CEⅤ ENT MASTER RECEIVER MODE SELECTED:已发送从 杠地址 printf("urn The slave address is ox ir'in,12C_ReceiveData(12C1)); //12C_NACKPosition Contig(l2Cl, I2C_NACK Position_Next l case(12C EVENT MASTER BYTE RECEIVED |(2C FLAG BTF& OxOf): /9F- 个数据已接收 /if(Tx_Counter<BufferSize) printf("win The 12C1 has send data od lwn, 12C1_Buffer_Tx[Rx_Counter]) I2C_SendData(l2C1, I2Cl_BuffeT_Tx[Tx_Counter++1); else 12C_GenerateSTOP(2Cl, ENABLE); I2 C_IFConfig(I2CL,2 C IT EVTILZC IT BUF DISABLE:∥计数发送的 个数 / /2C_NACKPosition Config(2Cl, I2C_NACKPosition_Current ∥!!!!要接收最后一个字节前先关总线,不然总线锁死!!!!!!! I2C_Generate STOP(2Cl, ENABLE); printf("rin The I2Cl has received data 2 %ox rn", 12C_ReceiveData(2c1) ∥!!!!接收了两个同样的数据,没有这个释放不了RXNE!!!! //2C_ReceiveData(I2C1) printf( Tr\n The I2CI is finish rn") ∥ C coNtig(Cl,2 CIT YT2 C BU, DISABLL;∥计数发送的个数 break case 0x40 ∥!!!!接收了两个同样的数据,没有这个释放不了RXNE!!! I2C- ReceiveData(I2Cl) default:(break; J void I2C2_ Ev IRQHandlerd void) show counter+. if(show_counter2>100000) counter2=0; printf("on The I2C2 Last Event is %ox rn",I2C_GetLastEvent(I2C2)); switch(2C_GetLastEvent(I2C2) case i2 EVENT SLAVE TRANSMITTER ADDRESS MATCHED:〃收到匹配 的地址数据 printf("T'n The I2C2 is ready ru ) I2C Generate STOP(2C2, DISABLE) break. case i2CEⅤ ENT SLAVE BYTE TRANSMITTING:∥发送数据 printf(rn The I2C2 transmits is transmitting rIn"); //2C-ClearFlag(2C2, I2C_FLAG_tXE) //12C-ClcarFlag(T2C2, I2C_FLAG_TXE I I2C- FLAG- BTF) 12C- SendData (2C2, 0xb6+ Rx Counter); ∥总共调用了4次 break ∥发送数据,要发送,不然锁死,不过 master没收到,不知道干嘛的 case I2C EVENt SLAVE BYTE TRANSMITTED printf( rin The I2C2 transmits one byte r'n") //12C_-ClearlTPending Bit(2C2, 12C_FLAG_BTF); 12C_Send Data(2C2, Uxb6 +(Rx_Counter++)); case i2 EVENT SLAVE STOP DETECTED:到结束条件 printf("rin The 12C2 is finish irin") 12C_Clear Flag(2C2, I2C_FLAG-STOPF) I2C_ STOP(2C.2, ENABLE); //2C_ClearlTPending Bit(2C2, I2C_FLAG_stoPE //2c ITConfig(2c2, I2C IT evtIl2C IT buf,disable); break default: (break; /main. c 名称:LC测试24C02测试 编写: mingzhang. zhao 内容:测试stm32f103vc6的硬件12C实现中断收发数据 注意事项: 1 USART1:PA9为TX,PA10为RX I2C1:PB6为SCL,PB7为SDA 2C2:PB0为SCL,PBIl为SDA include stm 32f1ox h include stdio h define prInte on void RCC_Configuration( void); void gPio_Contiguration(void) void USARTConfiguration(void ); void 2C_Configuration(void); void NVIC_Contiguration(void); void Delay( IO uint32t t; u82C1 ADDRESS=0x30;∥7位I2C地址 &2C2 ADDRESS=0X31 #define size 4 wu8 12C1_Buffer_Tx[Size]=(1, 2, 3.4; vu8 I2C2_Buffer_Rx[Size]= [OF u 32 BufferSize= size int main( void) RCC_Configuration() GPIO Configuration USART Configuration(; I2C Configuration(: NVIC Configuration I2C GenerateSTART(I2Cl, ENABLE while(l) Delay(l000000); I2C_Generate START(I2C1,ENABLE) /I2C1循环读取数据 void 12C_ Contiguration(void) 12C_InitTypeDef 12C_Initstructur I2C InitStructure I2C_ Mode= I2C_ Mode i2C 12C_InitStructure I2C_ Duty Cycle =I2C_Duty Cycle_2 [2C Initstructurei2c own address=lcl addrESS 12C InitStructure I2C Ack= I2C Ack Enable 12C_InitStructure I2C_ Acknowledged Address =I2C_ AcknowledgedAddress_7bit 12C_InitStructure I2C_ClockSpeed= 200000 12C_Init(I2Cl, &l2c_Initstructure) T2C InitStrmicture. 2c Mode 12C Mode 12C. 12C InitStructure. 2C Duty Cycle=I2C Duty Cycle 2 I2C Init Structure i2C OwnAddress 1= I2c2 ADDRESS I2C InitStructureI2C Ack= l2C Ack Enable I2C InitStructure i2c AcknowledgedAddress= I2c AcknowledyedAddress 7bit I2C_InitStructure. I2C_Clock Speed 2010000 12C_ Init(2C2, &12C_InitStructure) I2C_ITConfig(12C.1, 2C._IT_FVTII2C-_IT_BUF,ENABLE) I2C_ITConfig(12C2, I2C_IT_EVTII2C_IT_BUFENABLE I2C Cmd(I2Cl ENABLE) 12C__Cmd(2C2, ENABLE) 2 C_Acknowledge Config(I2C1, ENABLE);∥允许应答 2 C Acknowledge config(2C2, ENABLE):∥允许应答 void NviC_Configuration(void) NVIC_ InitTypeDef NvIC_InitStructure NvIC- Priority Group Config(NVIC_Priority Group_1) NvIC-InitStructure. NVIC-IRQChannel= I2CIEvIrQn NviC_nitStructure NvIC_IRQChannelPreemptionPriority =1 NVIC_InitStructure NVIC_IRQChannelSubPriority =0; NvIC InitStructure NVIC-IRQChannelCmd= ENABLE NVIC_ Init(&nvic InitStructure): NVIC InitStructure NVIC IRQChannel= I2C2 EV IRQn NvIC_InitStructure NVIC_IRQChannelPreemption Priority =0; NvIC-InitStructure NVIC_IRQChannelSubPniority=0: NVIC InitStructure NvIC_ IRQChannelCmd eNabLe NVIC_Init(&NViC_InitStructure) void GPio_Configuration(void) GPIO_ InitTypeDef GPIO_InitStructure ∥始化I2C1 GPIo_InitStructure GPIO_Speed= gPIo_Speed_5OMHz, GPIO InitStructure. GPIO Pin= GPIO Pin 6IGPIO Pin 7 GPIO InitStructure gPio Mode= gpio Mode AF OD: GPIO_Init(GPIOB, &GPIo_InitStructure) ∥初始化I2C2 GPio nitstructure GPio Pin= gPio Pin 1o GPio pin 11 GPIO_InitStructure GPIO- Speed= gPio_speed_ 50MH7 GPIO InitStructure gPio Mode= gPio Mode aF od GPIO_Init(GPIOB, &GPIo_Initstructure); ∥始化 USART1 GPIO InitStructure GPIO_ Pin = GPIO Pin 9; GPIO InitStructure GPIO Mode= GPIo Mode AF PP GPIO Init(GPIOA, &GPIo Initstructure) GPIO InitStructure GPio Pin= gPio Pin 10 GPIO InitStructure gPio Mode= gPio Mode In floating: GPIO Init(GPIOA, &GPIO Initstructure) void RCC Configuration( void) /定义枚举类型变量 HSEStartUpStatus* Error Status HSEStartUp Status /复位系统时钟设置桦 RCC DeInito /开启HSE* RCC- HSEConfig(RCC HSE ON) 等待ISE起振并稳定* HSEStartUpStatus= RCC_ WaitForhseStartUpO /*判断HSL起是否振成功,是则进入(内部 if(HsEStartUpStatus = SUCCESS) 选择HCLK(AHB)时钟源为 SYSCLK1分频* RCC- HCLKConfig(RCC_sYSCLK_ Divl 选择PCLK2时钟源为HCLK(AHB)1分频* RCC PCLK2Config(RCC hClk Divl) 选择PCLK1时钟源为HCLK(AHB)2分颇* 【实例截图】
【核心代码】

标签:

实例下载地址

STM32硬件中断收发I2C数据

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警