Юрий48 0 16 октября, 2019 Опубликовано 16 октября, 2019 · Жалоба Создал структуру typedef struct { float K_Ves; // 4 byte Вес/значение АСП float Giray; // 4 byte Калибровочный вес } Kalibr_Par; Создаю указатель на структуру uint32_t* AddressSrc = (void *)&Kalibr_Par; На эту строчку Keil ругается. Что не так? Используется в функции HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, AddressDes, *(uint32_t *)AddressSrc) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 56 16 октября, 2019 Опубликовано 16 октября, 2019 · Жалоба 2 minutes ago, Юрий48 said: Создал структуру Вы создали не структуру, а тип. Или уберите typedef или создайте объект: Kalibr_Par cal; uint32_t* AddressSrc = (void *)&cal; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 32 17 октября, 2019 Опубликовано 17 октября, 2019 · Жалоба Kalibr_Par cal; Kalibr_Par * p_cal = &cal; p_cal->K_Ves = 0.0f; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Юрий48 0 17 октября, 2019 Опубликовано 17 октября, 2019 · Жалоба Спасибо всем. Не то, что бы полноценно осмыслил, но вот так заработало. typedef struct { float K_Ves; // 4 byte Вес/значение АСП float Giray; // 4 byte Калибровочный вес } tpKalibr_Par; tpKalibr_Par Kalibr_Par; И задавать параметры можно так Kalibr_Par.K_Ves = 1.0; Kalibr_Par.Giray = 10.0; Раз уж коснулся вопросов чайника, то вот эта строка HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0)); работает нормально. Но Keil выдаёт предупреждение на счёт восклицательного знака. А, вот, как же правильно надо записать эту конструкцию, что бы предупреждений не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба if((GPIOB->IDR)&(1<<0)) GPIOC->BSRR = (1<<(13+(1)*16)); else GPIOC->BSRR = (1<<(13+(0)*16)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 129 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба Вот так получше будет GPIOC->BSRR = (1 << 13) << (GPIOB-IDR & 1)*16; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба 8 часов назад, Юрий48 сказал: Но Keil выдаёт предупреждение на счёт восклицательного знака. Совремнная наука отрицает существование телепатии, поэтому было бы очень полезно приводить полный текст этого предупреждения. Если, конечно, вы хотите получить ответ именно на свой вопрос, а не как два предыдущих. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба 4 hours ago, mcheb said: if((GPIOB->IDR)&(1<<0)) GPIOC->BSRR = (1<<(13+(1)*16)); else GPIOC->BSRR = (1<<(13+(0)*16)); Это, простите, настоящий код с настоящего боевого проекта? Можно только позавидовать Вашей внимательности и усидчивости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Юрий48 0 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба 3 hours ago, Сергей Борщ said: Совремнная наука отрицает существование телепатии, поэтому было бы очень полезно приводить полный текст этого предупреждения. Если, конечно, вы хотите получить ответ именно на свой вопрос, а не как два предыдущих. Извините. Хочу получить ответ именно на свой вопрос, поэтому исправляюсь и вот полный текст этого предупреждения ../Src/stm32f1xx_it.c(295): warning: #188-D: enumerated type mixed with another type HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба 1 hour ago, esaulenka said: Это, простите, настоящий код с настоящего боевого проекта? Можно только позавидовать Вашей внимательности и усидчивости. Я пользуюсь макросами типа /**BUTTON GPIO Configuration PB15 ------> BUTTON */ #define BUTTON_IS_PRESSED !((GPIOB->IDR)&(1<<15)) #define BUTTON_NOT_PRESSED ((GPIOB->IDR)&(1<<15)) #define BUTTONFREQ LEDFREQ /**LED GPIO Configuration PC6 ------> RED_LED PC7 ------> GREEN_LED */ #define Gled(x) GPIOC->BSRR = (1<<(7+(1-(x))*16)) #define Rled(x) GPIOC->BSRR = (1<<(6+(1-(x))*16)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба 2 hours ago, Юрий48 said: ../Src/stm32f1xx_it.c(295): warning: #188-D: enumerated type mixed with another type Подозреваю, что 3й параметр в HAL_GPIO_WritePin какой то enum. '!' возвращает bool (или int - в зависимости от версии языка) Явно приведите тип Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба 2 часа назад, Юрий48 сказал: ../Src/stm32f1xx_it.c(295): warning: #188-D: enumerated type mixed with another type HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0)); Вероятно, функция HAL_GPIO_WritePin ожидает в качестве третьего параметра какой-то свой велосипедный enum, в котором закодированы значения true и false. Про стандартный stdbool.h разработчики куба, скорее всего, не слышали. Попробуйте так: HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, (enum_type)(!HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0))); вместо enum_type подставьте тот тип, который ожидает функция HAL_GPIO_WritePin. Его вы можете увидеть в описании или в прототипе функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 32 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба Конечно телепаты уехали. Но всегда есть книги. Когда товарищ пишет !, какую операцию он имеет в своей голове ? И к какому выражению он её хочет применить. Что такое ! 5 ? Пять минут подумать и ответ будет сам собой (5 это просто для примера, можно подставить 135). Хотя 135 это тоже не просто так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grigorij 0 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба Отрывок из stm32f1xx_hal_gpio.h: typedef enum { GPIO_PIN_RESET = 0U, GPIO_PIN_SET }GPIO_PinState; ... GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); ... Проще HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0)); переписать через IF...ELSE и не морочить себе голову: state = HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0); if (state == .... ) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, .... ); else HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, .... ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Юрий48 0 18 октября, 2019 Опубликовано 18 октября, 2019 · Жалоба 1 hour ago, Сергей Борщ said: Попробуйте так: HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, (enum_type)(!HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0))); вместо enum_type подставьте тот тип, который ожидает функция HAL_GPIO_WritePin. Его вы можете увидеть в описании или в прототипе функции. Спасибо больше. Именно в таком духе и ожидал ответ. Ещё раз прошу извинений за несобранность и благодарю за снисхождение к чайникам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться