STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Понятно, спасибо.

Мой диагноз - как допилят 6-ю версию пусть позовут. А я как-нибудь на вменяемых компиляторах останусь.
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

А вменяемые -- это какие? На сайте арма есть GCC 7. К кейлу я не стал его прикручивать, а как автономный компайлер через make мои исходники собирает без проблем. Я, правда, без плюсов пишу.
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

GCC 7 - C++17
IAR - C++14 с элементами С++17
Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение Oxford »

VladislavS, для начало хотя бы ANSI C изучил. Тебе уже обьяснил что в С++ явное инстанцирование шаблона делается после реализации.

Реализация шаблонов должна быть определена в заголовочном файле, чтобы компилятор смог выполнить инстанцирование шаблона для любых аргументов, но можно скрыть реализацию, используя явное инстанцирование. В заголовочном файле при этом остаётся только объявление шаблонов, а реализация помещается в отдельный файл. Для всех возможных вариантов применения шаблонов в этом модуле выполняется явное инстанцирование

Изучай С++ и не умничай на форумах. Ты слушай что тебе люди говорят и не брызгай своей желчью.
И завязывай уже KEIL убогим называть. В голове проблемы у тебя.

Если компилятор додумал твоих тараканов и проглотил это не значит что ты сделал по стандарту.
Это ты еще MISRA C не юзал, там для тебя вообще полнейший АД будет. Более 500 правил.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Oxford , ты что, по всему интернету за мной гоняться будешь? Э как тебя штырит то :)
Реклама
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

Re: STM32 новичку в ARM что к чему

Сообщение pavell »

Совершенно неожиданно столкнулся с проблемой, по всей видимости, настроек кейла. Перестал работать дебагинг. Создал новый проект, запускаю дебаг и... ничего. Указатель стоит на функции main() и дальше двигаться не желает:
СпойлерИзображение
Делаю сброс, после чего начинается начальная инициализация, которая останавливается на импорте SystemInit и далее так же не движется:
СпойлерИзображение
Уже глаз дергается, но понимания где косячу так и нет :dont_know:
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

А проект собирается с отладочной информацией? Гляньте таб debug в опциях проекта.
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

Re: STM32 новичку в ARM что к чему

Сообщение pavell »

Там я все на 10 раз перепроверил уже, в приложении скрин на всякий. Я вот еще что заметил, проблема не только в дебаге - проект собирается, благополучно отправляется в МК, но при этом загруженный в него код не исполняется. В режиме дебага руками потыкал регистры - реагирует адекватно, что случилось?
Вложения
2018-08-02_23-55-19.png
(33.04 КБ) 258 скачиваний
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 новичку в ARM что к чему

Сообщение Мурик »

На втором скрине видно что произошел переход в NMI_Handler.
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: STM32 новичку в ARM что к чему

Сообщение bezzabotna »

Здравствуйте.
Настраиваю I2C с помощью HAL.
В main.c в глобальных переменных появляется

Код: Выделить всё

I2C_HandleTypeDef hi2c1;
для заполнения структуры.
Теперь мне нужно использовать hi2c1 в функциях для работы с периферией

Код: Выделить всё

HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);

HAL_I2C_Mem_Write(hi2c1, (uint16_t) (slave_adr<<1), (uint16_t) adxl_reg, I2C_MEMADD_SIZE_8BIT, adxl_data, datasize, (uint32_t)1000) {}//
Эти функции мне нужны в других .c файлах.
Сами функции видны, а вот на первый аргумент компилятор ругается

Я пиcала и в хедере и в .c файле, и без extern пробовала, но компилятор ругается

Код: Выделить всё

extern I2C_HandleTypeDef hi2c1; 

error: #20: identifier "I2C_HandleTypeDef" is undefined
I2C_HandleTypeDef hi2c1;
Как быть?

В принципе неважно, HAL это или какая либо друга библиотека. Непонятно как "портировать" переменные структуры между модулями.
Я конечно все понимаю, но этого я не понимаю.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

у вас компилятор не видит типа I2C_HandleTypeDef, а не структуры hi2c1. вам надо там, где эта структура упоминается/используется (или указатель на неё) подключить соответствующий хедер из HAL, где выполнено описание этого типа
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: STM32 новичку в ARM что к чему

Сообщение bezzabotna »

Проблема "решилась" помещением функция R/W в main.c
Теперь они выглядят так:

Код: Выделить всё

void I2C1_WriteData(uint8_t slave_adr, uint8_t reg, uint8_t*data, uint16_t datasize){   
    uint8_t error_str[]={"I2C Error"};
    while(HAL_I2C_Mem_Write(&hi2c1, (uint16_t) (slave_adr<<1), (uint16_t) reg, I2C_MEMADD_SIZE_8BIT, data, datasize, (uint32_t)1000)!= HAL_OK){
        if (HAL_I2C_GetError(&hi2c1) == HAL_I2C_ERROR_AF){
            LCD_Clear(white);
            LCD_PutStr(0,0,error_str,red,white);
}}}
//---------------------------------------------------------------------------------------//
void I2C1_ReadData(uint8_t slave_adr, uint8_t reg, uint8_t*data, uint16_t datasize){
    uint8_t error_str[]={"I2C Error"};
    while(HAL_I2C_Mem_Read(&hi2c1, (uint16_t) (slave_adr<<1), (uint16_t) reg, I2C_MEMADD_SIZE_8BIT, data, datasize, (uint32_t)1000)!= HAL_OK){  
        if (HAL_I2C_GetError(&hi2c1) == HAL_I2C_ERROR_AF){
            LCD_Clear(white);
            LCD_PutStr(0,0,error_str,red,white);
}}}
А в других фалах эти функции прописываются с extern в хэдере.
Все работает, но мне бы все равно хотелось узнать есть ли альтернативное решение это проблемы со структурами.

Добавлено after 4 minutes 50 seconds:
Описание этого типа находится в "stm32f2xx_hal_i2c.h", который у меня подключен, иначе бы функции HAL_I2C_Mem_Read, HAL_I2C_Mem_Write не были бы видны, они описаны там же.
Я конечно все понимаю, но этого я не понимаю.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

bezzabotna писал(а):Я пиcала и в хедере и в .c файле, и без extern пробовала, но компилятор ругается
Код:
extern I2C_HandleTypeDef hi2c1;
если он ругается на это, то именно в этом месте где-то выше по тексту и должен быть проинклюден stm32f2xx_hal_i2c.h - это так?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: STM32 новичку в ARM что к чему

Сообщение bezzabotna »

Да.
Пробовала подключать и напрямую
#include "stm32f2xx_hal_i2c.h"
и через
#include "stm32f2xx_hal.h"
Ошибки выдает.
Я конечно все понимаю, но этого я не понимаю.
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: STM32 новичку в ARM что к чему

Сообщение arkhnchul »

покажите весь проект, чего там куда понаписали.

навскидку так - хидер, в котором вы объявляете переменную, точно цепляется после HAL-овских?
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: STM32 новичку в ARM что к чему

Сообщение bezzabotna »

Действительно в main.c было
#include "main.h"
#include "stm32f2xx_hal.h", а не наоборот.
Но на количество ошибок это не повлияло. В остальных файлах вроде в правильном порядке.
Вложения
adxl345.c
(1.96 КБ) 548 скачиваний
main.c
(11.91 КБ) 348 скачиваний
main.h
(3.48 КБ) 539 скачиваний
adxl345.h
(873 байт) 512 скачиваний
Я конечно все понимаю, но этого я не понимаю.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3431361#p3431361"]навскидку так - хидер,[/uquote]
Чуть глаз не вырвало. Может все-таки так?
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

А среда какая?
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

Re: STM32 новичку в ARM что к чему

Сообщение bezzabotna »

keil 5
Я конечно все понимаю, но этого я не понимаю.
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: STM32 новичку в ARM что к чему

Сообщение arkhnchul »

в main.h подцепите stm32f2xx_hal.h , иначе на момент объявления там переменной этот тип еще не описан

или нет. Чот запутался.

что происходит: при попытке компиляции файла adxl345.c с раскомментированными в adxl345.h строчками с extern I2C_HandleTypeDef hi2c1, ADXL_WriteData и ADXL_ReadData оно не может найти тип I2C_HandleTypeDef?

в stm32f2xx_hal_conf.h раскомментировано #define HAL_I2C_MODULE_ENABLED?
Ответить

Вернуться в «ARM»