PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : [سوال] راه اندازی اینتراپت سریال با استفاده از کتابخانه hal



Raha323
11-07-2016, 15:17
با سلام
دوستان من برای دریافت سریال از طریق اینتراپت و با استفاده از کتابخانه hal راهنمایی میخوام ممنون میشم کمکم کنید
تابع USART1_IRQHandler(void در stm32f1xx_it.c وجود دارد ولی با این حال که من در خط سریال دیتا ارسال میکنم ولی این تابع فعال نمیشود
تابع  HAL_USART_Receive_IT() را باید در دل irq فراخوانی کنم؟اگر کسی مثالی دارد ممنون میشم توی نت خیلی سرچ زدم مثالی به دردبخور پیدا نکردم
با سپاس

mrm
11-07-2016, 19:21
شما داخل بخش configuration>usart>nvic_setting
تیک enable رو زدید؟
بعد باید داخل nvic
مقدار priority ها رو دستی تنظیم کنید!!!!!!

Raha323
12-07-2016, 11:35
شما داخل بخش configuration>usart>nvic_setting
تیک enable رو زدید؟
بعد باید داخل nvic
مقدار priority ها رو دستی تنظیم کنید!!!!!!
بله enableمی باشد ولی منظورتون از تنظیمات دستی "
مقدار priority ها رو دستی تنظیم کنید!!!!!!"چیست؟
من باید در فانکشن IRQ کد های دریافت سریال رو بنویسم؟

mrm
12-07-2016, 16:08
منظورم داخل بخش NVIC Configuration
به تعداد اینتراپت ها مقدر Priority group
preemption priority
sub priority
مقدار بدید
مقلا اگر اینتراپت تایمر و یوزارت فعال هست با فرض Priority group=0 مقدار sub priority رو برای تایمر عدد یک و یوزارت رو عدد 2 بدید

Raha323
18-07-2016, 13:58
این کاری هم که گفتید انجام دادم ولی در تابعIRQ هیچ اتفاقی نمی افتد حتی فرمان روشن شدن یک LED رو گذاشتم در IRQ و از میکروی دوم سریال ارسال میکنم روشن نمیشود
شما بگید من چطور دیتا دریافت کنم از میکروی یک توسط توابع PUTCHAR دوتا بایت دیتا ارسال میکنم ولی در میکروی دوم چطور دریافت کنم؟؟؟؟؟؟؟؟
cry::

mrm
18-07-2016, 15:31
پروژه رو کامل بزارید تا ببینم مشکل کجاست

Raha323
19-07-2016, 16:28
پروژه رو کامل بزارید تا ببینم مشکل کجاست


با تشکر دوست گرامی
من از روی یه مثال
این سه خط رو اضافه کردم به برنامه
HAL_NVIC_SetPriority(USART1_IRQn,2, 1);
HAL_NVIC_EnableIRQ(USART1_IRQn);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);

و الان IRQ فعال است و به اضای هر بایتی که ارسال میکنم led من چشمک زن میشود
الان در بحث دریافت دیتا مشکل دارم من از برد اولم دوتا بایت پشت سر هم ارسال میکنم ولی نمیتونم این دوبایت را جدا جدا دریافت کنم و در متغیری بریزم در PIC خیلی راحت این کار رو میکردم
یکباره میکرو فقط شروع میکنه بایت دوم رو میگیره نمایش میده
من تابع


HAL_UART_Receive_IT(&huart1, aRxBuffer, 1);

در void USART1_IRQHandler(void) نوشتم و aRxBuffer یک آرایه با ایندکس 1انتخاب کردم
من در میکروی اول یک دیتای 16بایتی دارم که چون در یوزارت نمیشود دریافت 16 داشت تبدیل کردم به دوتا 8 بایتی و میخوام در میکروی 2 این دو بایت را بگیرم و 16 بکنم و اگر انشالله بشود بقیه کارم را ادامه بدهم

در پروژه ام چیز خواستی ننوشته ام چشم قرار میدهم

- - - Updated - - -

و در ضمن من وقتی اینتراپت irq ام میخورد while برنامه از کار میافتد
مثلا یک پرینتف ساده میگذارم چاپ میشود ولی به محض آمدن دیتا به اینتراپت سریال دیگر قطع میشود

Raha323
19-07-2016, 16:40
اینم از پروژه