Jump to content

    

STM32F303K6 проект без куба

Вот спрошу за такой вопрос. Обычно, что бы не заморачиваться, я в кубе создавал пустой проект, а потом руками накидывал все настройки. При необходимости использовал LL. Все работало. Атоллик, версия 9.0.1 и 9.3.0. Тут решил попробовать создать проект без куба: новый проект С -> эмбедед проект С. Далее выбор процессора и тд. Для процессора stm32f030r8 все прошло нормально. А для процессора stm32f303k6 - затыка, не работает ни в какую. При этом компилируется без ошибок. От безнадеги залил прошивку от f030r8 в f303k6 и .... усе работает, мигает светодиёдик. Почитал DS, RM, PM, пытался из куба FW_F3_V1.10.0 добавлять файлы... что-то вот не приходит мысля отчего может быть.

Прикрепил архив с двумя проектами: stm32f030r8 и stm32f303k6, может кто подскажет направление в каком идти (ну, кроме очевидного :о) ) Логика простая - порт А6 дергаю светодиодом, на порт А8 (MCO) вывожу внутренний системный клок. RCC не настраиваю, что после сброса.

Ну и немного опережая - Atollic, на работе ничего другого поставить не могу, в смысле платных систем, плюс он поддерживается STM. Отсюда и выбор. По статьям из интернета, тоже тоже не особо, там практиковались на F100. Да и у меня f030r8 работает.

 

test.zip

Share this post


Link to post
Share on other sites

Открывайте свойства проекта - правой кнопкой мыши по проекту - Properties и сравнивайте по каждому пункту с рабочим, он вообще не настроен. Сходу точно не настроена конфигурация отладки, тип мк, и много еще чего.

PS: У меня правда AC6, тоже бесплатный, тоже на эклипсе, поэтому могло что-то не так открыться, что не видит тулчейна.

Share this post


Link to post
Share on other sites

Да, отладка не работает на обоих проектах. В режим отладки входит, но при попытке начать отладку зависает, рестарт в помощь. Но при этом прошивка f030r8 рабочая.

Атоллик и АС6 видимо разные, я вижу в настройках свой процессор. Иначе и не скомпилировался бы проект.

Хорошо, надо покопать в сторону отладки, может 030r8 попроще, чем 303k6, совпало.

 

Share this post


Link to post
Share on other sites

Прежде чем записывать новое значение в регистры, у которых за настройку каждой ножки отвечают более одного бита, надо сначала эти биты обнулить.

Например

uint32_t tmp_reg = GPIOA->MODER;

tmp_reg &= ~(GPIO_MODER_MODER6); // reset
tmp_reg |= GPIO_MODER_MODER6_0;				// записываем новое значение - порт A бит 8 - выход

GPIOA->MODER = tmp_reg;

Тоже самое и с альтернативными функциями.

Так же.

С помощью 

GPIOA->MODER |= GPIO_MODER_MODER8_1;					//порт A бит 8 - альтернативна¤ ф-¤

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

Share this post


Link to post
Share on other sites

В данном случае я вывожу на ножку А8 системный клок: RCC->CFGR |= 0x4000000; А что бы клок вышел, на до предварительно определить вывод как альтернативная функция. А после сброса альтернативная функция AF0 устанавливается как MCO по умолчанию, те лишних телодвижений не требуется.

Насчет битов не совсем понял. Иногда записываю в регистр за один присест число, где заранее подсчитаны нужные биты. Либо с помощью И/ИЛИ по одному биту. Проблем не было.    Хотя согласен, не знамо как компилятор разрулит, может и надо сразу все писать.

Share this post


Link to post
Share on other sites
7 minutes ago, Vlad_G said:

В данном случае я вывожу на ножку А8 системный клок: RCC->CFGR |= 0x4000000; А что бы клок вышел, на до предварительно определить вывод как альтернативная функция. А после сброса альтернативная функция AF0 устанавливается как MCO по умолчанию, те лишних телодвижений не требуется.

Насчет битов не совсем понял. Иногда записываю в регистр за один присест число, где заранее подсчитаны нужные биты. Либо с помощью И/ИЛИ по одному биту. Проблем не было.    Хотя согласен, не знамо как компилятор разрулит, может и надо сразу все писать.

Нельзя всегда надеяться на значения по умолчанию. Корректнее и надежнее все прописывать явно.

Дело не в том как компилятор разрулит, а в том, что за настройку ножки (значение MODE) отвечает сразу два бита. Вы изменяете только одни из них. При этом неизвестно, какое значения в другом бите.

Поэтому надо сначала сбросить оба бита в ноль, а потом в оба бита записать новое значение.

Share this post


Link to post
Share on other sites

Проверьте что в проект включаются (в том числе неявно, через #ifdef) именно заголовочные файлы для требуемого процессора.

В модуле main.с поставьте отладочные 

#ifndef XXXXX

debugwrite("def XXXX error")

#endif 

(синтаксис точно не знаю, в случае неверной установки переменной выдать сообщение в окно лога компилятора)

Проверьте все макро-переменные, определяемые в опциях проекта компилятора и линкера, могут "заваляться" от другого процессора.

 

Share this post


Link to post
Share on other sites

Ларчик открывался так, файл линкера (STM32F303K6_FLASH.ld) был неправильный. Изменив параметр - _estack - все заработало. Сий файл подсунул толикатоллик при создании проекта. А вот кубМХ подсовывает вполне себе рабочий файл.

 

Теперь вопрос. А где брать этот файл? Ожидал, что в кубе для конкретной серии он должен быть, но там его нет. Файлы startup, заголовочные файлы для конкретных процессоров есть, а файла линкера нет. Точнее есть, но этот файл можно найти (а можно и не найти) в папке с примерами. Но и там тоже не так просто, там файл STM32F303K8Tx_FLASH.ld для проца с 64 кб на борту. Править руками?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now