سلام خدمت شما آقای محمدی عزیز
قسمتی که مشکل ایجاد میکرد isr برنامه بود که در زیر اونو مشاهده میکنید.
کد:
void USART1_IRQHandler(void)
{
u8 c;
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // Received characters modify string)
{
USART_ClearITPendingBit(USART1, USART_FLAG_RXNE);
// clear interrupt
c=USART_ReceiveData(USART1);
if( (c==Line_Feed || c==Carriage_Return) && (RX_Count!=0) ) { RX_Count=RX_Count|0x8000 ; RX_BUF[RX_Count&0x7FFF]='\0';}
if( c>31 && c<127 && (RX_Count&0x8000)==0 )
{
RX_BUF[RX_Count]=c;
RX_Count++;
}
}
}
این کد مشکل من رو حل کرد البته بعد از اونکه RX_Count&0x8000)==0 را به شرط if آخری اضافه کردم .برنامه من مربوط به سیم 900 میشه که الگوریتم من اینطوریه که هروقت از طریق یوزارت چیزی میرسه وارد سرویس وقفه میشه و در اینجا پس از اینکه عبارت کامل رو دریافت کرد و در RX_BUF ریخت RX_COUNT ام اس بی اش یک میشه که نشان دهنده ی اینه که یه عبارت کامل رسیده و باید بررسی بشه .وقتی این عبارتی که اضافه کردم( که برنامه درست شد ) نبود باید در ادامه RX_COUNT پس از نول عبارت قبلی عبارت بعدی گذاشته میشد ولی این اتفاق نمی افتاد و گیر میکرد و میرفت تو HardFault_Handler که دلیلشو نمیدونم .هرچند مشکل من حل شد ولی خب اون دلیله هنوز واسم مبهمه .و اگه شما نظری دارید خوشحال میشم بنده رو راهنمایی کنید.ممنون