历史上的今天
今天是:2024年09月11日(星期三)
2018年09月11日 | STM32中I2C总线上数据的读、写。
2018-09-11 来源:eefocus
/**
* @brief 从I2C1总线上的某一器件的某一起始地址中读取一定字节的数据到数组中
* @param driver_Addr:I2C器件地址
* @param start_Addr:起始字节地址
* @param number_Bytes:要读取的字节数量(小于一页)
* @param read_Buffer:存放读取数据的数组指针
* @retval 是否读取成功
*/
u8 I2C1_Read_NBytes(u8 driver_Addr, u8 start_Addr, u8 number_Bytes, u8 *read_Buffer)
{
uint8_t read_Num;
u8 I2C_Timeout;
I2C_Timeout = 200;
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY) != RESET)
{
if((I2C_Timeout--) == 0)
{
return 1;
}
}
I2C_TransferHandling(I2C1, driver_Addr, 1, I2C_SoftEnd_Mode, I2C_Generate_Start_Write); //I2C_No_StartStop I2C_Generate_Start_Write
I2C_Timeout = 200;
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET)
{
if((I2C_Timeout--) == 0)
{
return 1;
}
}
I2C_SendData(I2C1, start_Addr);
I2C_Timeout = 200;
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TC) == RESET)
{
if((I2C_Timeout--) == 0)
{
return 1;
}
}
I2C_TransferHandling(I2C1, driver_Addr, number_Bytes, I2C_AutoEnd_Mode, I2C_Generate_Start_Read);
for(read_Num = 0; read_Num { I2C_Timeout = 200; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE) == RESET) { if((I2C_Timeout--) == 0) { return 1; } } read_Buffer[read_Num] = I2C_ReceiveData(I2C1); } I2C_Timeout = 200; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF) == RESET); { if((I2C_Timeout--) == 0) { return 1; } } return 0; } u8 I2C1_Write_NBytes(u8 driver_Addr, u8 start_Addr, u8 number_Bytes, u8 *write_Buffer) { u8 write_Num; u8 I2C_Timeout; I2C_Timeout = 200; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY) != RESET) { if((I2C_Timeout--) == 0) { //I2C_ClearFlag(I2C1, I2C_FLAG_BUSY); return 1; } } I2C_TransferHandling(I2C1, driver_Addr, number_Bytes+1, I2C_AutoEnd_Mode, I2C_Generate_Start_Write); I2C_Timeout = 200; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET) { if((I2C_Timeout--) == 0) { return 1; } } I2C_SendData(I2C1, start_Addr); //while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET); //I2C_TransferHandling(I2C1, driver_Addr, number_Bytes, I2C_AutoEnd_Mode, I2C_No_StartStop); for(write_Num = 0; write_Num { I2C_Timeout = 200; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) == RESET) { if((I2C_Timeout--) == 0) { return 1; } } I2C_SendData(I2C1, write_Buffer[write_Num]); } I2C_Timeout = 200; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF) == RESET) { if((I2C_Timeout--) == 0) { return 1; } } return 0; }
史海拾趣
|
3 保护电路的改进 针对上述分析,改进电路如图3所示,该电路具有以下特点。 1)通过在UC3842的采样电压处接入一个射极跟随器,从而在控制电压上增加了一个与脉宽调制时钟同步的人为斜坡,它可以在后续的周期内将△I扰动减小到零。因此,即使系统 ...… 查看全部问答> |
|
ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软 件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体系扩展、微处 ...… 查看全部问答> |
|
系統編號 : 094STUT0428039出版年 : 95 研究生: 施銘憲 論文名稱 : 5.8GHz RFID之射頻前端接收器設計指導教授 : 陳文山學位類別 : 碩士校院名稱 : 南台科技大學系所名稱 : 電子工程系 學號 : M9330202學年度 : 94 語文別 : 中文 論文頁數 : 77 … 查看全部问答> |
|
最超值的NRF905-CC11000-红外线综合开发板JASK2000 最超值的NRF905-CC11000-红外线综合开发板JASK2000 JASK2000开发系统 集成当前433频段最主流无线收IC :NRF905 ,CC1100及红外收发器,相信掌握这3款无线收发器原理及应用对大家在无线应用开发领域奠定扎实基础.我公司提供全面技术支 ...… 查看全部问答> |
|
请问一下,我用W880I在UDP模式下发短信(不支持TEXT模式),输入了AT+CMGS之后,在提示符下输入了类似下面的信息: at+cmgs=21 > 089168XXXXXXXXXXXX11000D91683118405057F000000006C8329BFD0E01 X部分为我的手机号码+F,经过两两对换的 但 ...… 查看全部问答> |




