rtfcnf 0 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба Добрый день. Пишу в IAR под STM32F7 на HAL Проблема в следующем, есть код в майн #define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET) #define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET) . . ADS131_1_Command(0X11); ADS131_1_SetConfig(); . . void ADS131_1_Command(uint8_t vd) { uint8_t data; ADS131_1_PIN_CS_ON; HAL_SPI_TransmitReceive(&hspi1, &vd, &data, sizeof(data), 0x1); ADS131_1_PIN_CS_OFF; } Он работает и микросхема команду правильно воспринимает Стоит мне перенести строки #define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET) #define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET) в отдельный файл port_def.h #ifndef __PORTS_H #define __PORTS_H #define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET) #define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET) #endif Код компилируется, проект собирается, но Код перестаёт работать. Верней работает, но микросхема на него не реагирует, хотя в ассемблере эта функция выглядит также. Не пойму что не так? Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба Не пойму что не так? Заранее спасибо. Забыли подключить port_def.h в тот файл где используете порты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rtfcnf 0 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба Извините, что в примере не привел, он подключен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба а какая необходимость обзывать переменную #ifndef __PORTS_H с подчерками впереди ? или и файл так назван ? Варинингов тоже нет ? Для отлова измените содержимое макроопределений на свое, например __no_operation() или любое другое. Похоже что файл опеределений макросов не включается по #ifndef Проверьте это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба Чудес не бывает. Сделайте hex обоих вариантов. Сравните. От переноса места определния текстовой подстановки (макроса) результирующий код меняться не должен - макросы разворачиваются еще до начала компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rtfcnf 0 23 сентября, 2016 Опубликовано 23 сентября, 2016 (изменено) · Жалоба а какая необходимость обзывать переменную #ifndef __PORTS_H с подчерками впереди ? или и файл так назван ? Привычка Варинингов тоже нет ? Нет, нету. Похоже что файл опеределений макросов не включается по #ifndef Проверьте это. Первым делом проверил. Чудес не бывает. Сделайте hex обоих вариантов. Сравните. От переноса места определния текстовой подстановки (макроса) результирующий код меняться не должен - макросы разворачиваются еще до начала компиляции. Упс, а hex разные. Изменено 23 сентября, 2016 пользователем rtfcnf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба Так у вас SET и RESET перепутаны. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба . . . . Упс, а hex разные. Чтоб не лезть в hex, можете диффером сравнить lst или asm или ... файлы из проектов "где хорошо" и "где плохо". Проверьте очередность по h-файлам - это иногда имеет значение. HAL макросы -функции работают на "базовой" адресации для периферии, которая процессоро-зависимая. Если за "базу" берется неправильный для данного процессора адрес, синтаксической ошибки не будет. Но и работать (правильно) тоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rtfcnf 0 24 сентября, 2016 Опубликовано 24 сентября, 2016 (изменено) · Жалоба Так у вас SET и RESET перепутаны. :) Собственное соглашение, ON - активный уровень, для чипа к которому подключен пин. k155la3, спасибо, проект и плата на работе так что до понедельника попробовать не смогу. Изменено 24 сентября, 2016 пользователем rtfcnf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 24 сентября, 2016 Опубликовано 24 сентября, 2016 · Жалоба Собственное соглашение, ON - активный уровень, для чипа к которому подключен пин. Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 24 сентября, 2016 Опубликовано 24 сентября, 2016 · Жалоба Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле. Виндузная утилита fc.exe - в текстовом и бинарном режиме или диффер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alag57 0 24 сентября, 2016 Опубликовано 24 сентября, 2016 · Жалоба Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле. ТС не видит. main.c #define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET) port_def.h #define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 24 сентября, 2016 Опубликовано 24 сентября, 2016 · Жалоба ТС не видит. респект :) ЭТО наверное ОНО и ЕСТЬ исм ! Надо пользоваться осцилографом для отладки и даже поиска очепяток. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rtfcnf 0 25 сентября, 2016 Опубликовано 25 сентября, 2016 · Жалоба Большое спасибо, всем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться