Поиск
Показаны результаты для тегов 'stm32f103 spi'.
-
Господа, я понимаю, что причину моей проблемы вы не найдете, но может быть подскажете, как искать ошибку. А может быть и констатируете, что это не ошибка, а глюк отладчика... Суть такова. Контроллер STM32F103, в нем включен USART. В обработчике прерывания по приему заполняется буфер, объявленный как uint8_t rx_buffer[50]; Буфер кольцевой. Работаю с KEIL. Отлаживаю по SWD, в окно watch я добавил rx_buffer. Проблема в чем - в эту переменную, согласно уведомлениям отладчика, периодически в случайные позиции на мгновение вместо 0x00 записывается 0xFF или 0xAA. При этом единственное место в программе, где в эту переменную что-то пишется - это обработка прерывания по приему, я ставил брейкпоинт на эту единственную строку - не срабатывает. Потому как я для чистоты эксперимента вообще отключил источник данных. Я закомментировал практически всю программу main() { while(1) { LCD_DrawFill(0,0,30,30,BLACK); } } Выяснилось, что глюк появляется когда присутствует именно эта строка. ну и анализ и комментирование строк в этой функции привели к тому, что глюк вызывается при записи в регистр данных SPI3. Я бы обозначил эту проблему, как конфликт SPI и RAM если бы не два "но". 1. В SPI ведется запись еще несколькими функциями, но проблема возникает только в одной из них. 2. Я написал кусок кода, который в цикле проверяет каждый элемент rx_buffer на предмет отличия его от изначального 0x00 и поставил на нем брейкпоинт. Понимая, что проверка и кратковременное изменение буфера могут не совпасть по времени, я запустил программу на ночь, по моим прикидкам буфер должен был быть проверен около 3 миллионов раз. Ни разу програма не засекла вмешательство в буфер. Похожие глюки, с записыванием данных не в те переменные у меня была как-то, когда я объявил безразмерный массив ( uint8_t XXX[]; ) Но в данном случае ничего такого у меня нет. Скажите, возможно ли что отладчик брешет? Как используя средства отдладки KEIL подловить момент записи в переменную и определить кто на нее посягает?
- 19 ответов
-
- stm32f103
- stm32f103 ram spi
- (и ещё 2 )