Полная версия этой страницы:
stm32f100c4t6 Keil4.74
Oleg_DI
Apr 6 2015, 13:31
Здравствуйте помогите. Проект сделан через stm32cube Keil компилировал без ошибок.Отладка запускается.Всё инициализация проходит. По прерыванию SysTik чтение I2C pca9555 9 кодов кнопок
HAL_I2C_Mem_Read(&hi2c1, (uint8_t)I2C_ADDRESSio, 0, I2C_MEMADD_SIZE_8BIT, (uint8_t *)&ButtonScan,4,300);
if(ButtonScan.InputR0!=0xff)ButtonPress.InputR0=ButtonScan.InputR0;
if(ButtonPress.InputR0==0xdf)
{ HAL_I2C_Mem_Read(&hi2c1, (uint8_t)I2C_ADDRESSrtc,Addres, I2C_MEMADD_SIZE_8BIT,(uint8_t *)&TuneBlock[NumberTuner],6,300);}
if(ButtonPress.InputR0==Button2)
{ HAL_I2C_Mem_Write(&hi2c1, (uint8_t)I2C_ADDRESSrtc,Addres, I2C_MEMADD_SIZE_8BIT,(uint8_t *)&TuneBlock[NumberTuner],6,300);}
если ставить метку при отладке на первую кнопку программа останавливается на ней.хотя нет никакого равенства.при последующим пуском
все кнопки работают.
Процессор запаян на монтажке. NRST пин емкость 10 мкф. меньше не запускалась программа после программирования без отлатчика.
KnightIgor
Apr 7 2015, 06:46
Цитата(Oleg_DI @ Apr 6 2015, 14:31)

Процессор запаян на монтажке. NRST пин емкость 10 мкф. меньше не запускалась программа после программирования без отлатчика.
Я предположу походя, что где-то у Вас не затянуты правильно входы BOOT0 и BOOT1.
Oleg_DI
Apr 7 2015, 07:05
BOOT1 в этом корпусе нет а BOOT0 на земле.Сейчас копаюсь в приоритетах прерываний в программе есть прерывания от tim3 может они влияют друг на друга.
Сергей Борщ
Apr 7 2015, 07:05
Если я правильно понял, у вас все работает, но вас смущает, что отладчик останавливается на коде, который не исполняется? Так это нормально. Вы откройте окно дизассемблера и посмотрите, какие команды в этот момент исполняются. Наверняка это команды с условным выполнением вроде ldrbne, strbne. Отладчик чисто физически не может отличить, когда такая команда выполняет полезную работу, а когда - нет. Смотрите чаще в окно дизассемблера, многие чудеса станут понятными.
Добавлено: а возможно, один и тот же участок ассемблерного кода используется разными ветками вашей высокоуровневой программой. Если сделать пару шагов по дизассемблированному коду, вы попадете в ту ветку программы, которая в этот момент реально выполняется.
Golikov A.
Apr 7 2015, 07:19
это еще мы не говорим про то что в кейле с оптимизацией не 0, а дефолт, что на самом деле -2 вообще нельзя доверять тресингу по С коду, там полное расхождение из-за оптимизации...
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.