Юрий48 0 Posted October 16 · Report post Создал структуру 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) Share this post Link to post Share on other sites
aaarrr 0 Posted October 16 · Report post 2 minutes ago, Юрий48 said: Создал структуру Вы создали не структуру, а тип. Или уберите typedef или создайте объект: Kalibr_Par cal; uint32_t* AddressSrc = (void *)&cal; Share this post Link to post Share on other sites
x893 0 Posted October 17 · Report post Kalibr_Par cal; Kalibr_Par * p_cal = &cal; p_cal->K_Ves = 0.0f; Share this post Link to post Share on other sites
Юрий48 0 Posted October 17 · Report post Спасибо всем. Не то, что бы полноценно осмыслил, но вот так заработало. 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 выдаёт предупреждение на счёт восклицательного знака. А, вот, как же правильно надо записать эту конструкцию, что бы предупреждений не было. Share this post Link to post Share on other sites
mcheb 0 Posted October 18 · Report post if((GPIOB->IDR)&(1<<0)) GPIOC->BSRR = (1<<(13+(1)*16)); else GPIOC->BSRR = (1<<(13+(0)*16)); Share this post Link to post Share on other sites
Arlleex 0 Posted October 18 · Report post Вот так получше будет GPIOC->BSRR = (1 << 13) << (GPIOB-IDR & 1)*16; Share this post Link to post Share on other sites
Сергей Борщ 0 Posted October 18 · Report post 8 часов назад, Юрий48 сказал: Но Keil выдаёт предупреждение на счёт восклицательного знака. Совремнная наука отрицает существование телепатии, поэтому было бы очень полезно приводить полный текст этого предупреждения. Если, конечно, вы хотите получить ответ именно на свой вопрос, а не как два предыдущих. Share this post Link to post Share on other sites
esaulenka 0 Posted October 18 · Report post 4 hours ago, mcheb said: if((GPIOB->IDR)&(1<<0)) GPIOC->BSRR = (1<<(13+(1)*16)); else GPIOC->BSRR = (1<<(13+(0)*16)); Это, простите, настоящий код с настоящего боевого проекта? Можно только позавидовать Вашей внимательности и усидчивости. Share this post Link to post Share on other sites
Юрий48 0 Posted October 18 · Report post 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)); Share this post Link to post Share on other sites
mcheb 0 Posted October 18 · Report post 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)) Share this post Link to post Share on other sites
xvr 0 Posted October 18 · Report post 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 - в зависимости от версии языка) Явно приведите тип Share this post Link to post Share on other sites
Сергей Борщ 0 Posted October 18 · Report post 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. Его вы можете увидеть в описании или в прототипе функции. Share this post Link to post Share on other sites
x893 0 Posted October 18 · Report post Конечно телепаты уехали. Но всегда есть книги. Когда товарищ пишет !, какую операцию он имеет в своей голове ? И к какому выражению он её хочет применить. Что такое ! 5 ? Пять минут подумать и ответ будет сам собой (5 это просто для примера, можно подставить 135). Хотя 135 это тоже не просто так. Share this post Link to post Share on other sites
Grigorij 0 Posted October 18 · Report post Отрывок из 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, .... ); Share this post Link to post Share on other sites
Юрий48 0 Posted October 18 · Report post 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. Его вы можете увидеть в описании или в прототипе функции. Спасибо больше. Именно в таком духе и ожидал ответ. Ещё раз прошу извинений за несобранность и благодарю за снисхождение к чайникам. Share this post Link to post Share on other sites