***********中断接收串口字符串**********
void USART1_IRQHandler(void)
{
uint8_t ch[20];
int i;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
//ch = USART1->DR;
ch = USART_ReceiveData(USART1);
i++;
}
FLASH_WriteByte (WRIT_START_ADDR ,ch,20) ;存入FLASH
}
***********存入FLASH**********
void FLASH_WriteByte (uint32_t addr ,uint8_t *p,u16 Byte_Num)
{
uint32_t HalfWord;
Byte_Num = Byte_Num/2;
FLASH_Unlock();
NbrOfPage=(WRIT_END_ADDR-WRIT_START_ADDR)/FLASH_PAGE_SIZE;
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
for( EraseCounter=0;( EraseCounter<NbrOfPage)&&(FLASHStatus==FLASH_COMPLETE);EraseCounter++)
{
FLASHStatus=FLASH_ErasePage(WRIT_START_ADDR+(FLASH_PAGE_SIZE*EraseCounter));
}
Address = WRIT_START_ADDR;
if (FLASHStatus == FLASH_COMPLETE)
{
while(Byte_Num --)
{
HalfWord=*(p++);
HalfWord|=*(p++)<<8;
FLASH_ProgramHalfWord(addr, HalfWord);
addr += 2;
}
}
FLASH_Lock();//??
}
***********读取FLASH**********
int main(void)
{
USART1_Config();
NVIC_Configuration();
FLASH_ReadByte(WRIT_START_ADDR , tempdata , 20);
for( k=0; k<20; k++ )
printf("%ch\r\n", tempdata[k]);
}
void FLASH_ReadByte(uint32_t addr , uint8_t *p , uint16_t Byte_Num)
{
while(Byte_Num--)
{
*(p++)=*((uint8_t*)addr++);
}
}
上面代码编译无错误 但串口发不出数据 是不是数据没有存入FLASH
|