/* Wait until receiving Flash address to write into + number of data to be written
+ the data to be written */
while (Rx_Idx!= 0);
/* Read the address */
Add_Flash = Read_Add();
/* Read the number of bytes to be written */
Number_Bytes_Transferred = Read_Byte_Page_Number();
if (Number_Bytes_Transferred <= PAGE_SIZE)
{
DATA_SIZE_IN_PAGE = 1;
}
else
{
if ((Number_Bytes_Transferred%PAGE_SIZE)==0)
{
DATA_SIZE_IN_PAGE= Number_Bytes_Transferred/PAGE_SIZE;
}
else
{
DATA_SIZE_IN_PAGE=(uint32_t) (Number_Bytes_Transferred/PAGE_SIZE)+1;
}
}
for (Idx=4; Idx<(Number_Bytes_Transferred+8)/2; Idx++)
{
I2C1_Buffer_Rx[2*Idx+1]=I2C1_Buffer_Rx[2*Idx+1]<<8;
I2C1_Buffer_Rx[2*Idx]=I2C1_Buffer_Rx[2*Idx]|I2C1_Buffer_Rx[2*Idx+1];
}
#if defined USE_STM3210B_EVAL || USE_STM32100B_EVAL
Erase_Page(Add_Flash,DATA_SIZE_IN_PAGE);
#elif defined USE_STM3210E_EVAL || USE_STM3210C_EVAL
if (((Add_Flash/(PAGE_SIZE/(PAGE_SIZE/Number_Bytes_Transferred)))&1)==0)
{
Erase_Page(Add_Flash,DATA_SIZE_IN_PAGE);
}
#endif
不好意思版主,没说清楚,是官网上的AN3078(in-application programming over IIC)里面的command.c的,我不明白为什么在把收到的字节转成半字的时候,
for (Idx=4; Idx<(Number_Bytes_Transferred+8)/2; Idx++)
这个Number_Bytes_Transferred要+8