Перейти к содержанию

Не мигает светодиод на Stm32f103c8t6


Рекомендуемые сообщения

Ни как не заставлю мигать светодиод на stm32f103c8t6. Она же BluePill.

Конфигурирую через CubeMX. Все по мануалам. Если пишу Blink через mBed, то все мигает. Как только пишу в CooCox IDE, все компилится без ошибок, заливается. Но реакции нет...

Выбился из сил. Делаю все внимательно. Но результата нет.

С МК имею опыт с Arduino. Сейчас осваиваю Stm32. mBed неохота, а на C не выходит пока.

 

Прикладываю main.c:

#include "main.h"
#include "stm32f1xx_hal.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1)
  {
	  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
	  HAL_Delay(300);
	  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
	  HAL_Delay(300);
  }
}

void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure the Systick interrupt time 
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick 
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/** Configure pins as 
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
*/
static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
void _Error_Handler(char * file, int line)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  while(1) 
  {
  }
  /* USER CODE END Error_Handler_Debug */ 
}

#ifdef USE_FULL_ASSERT


void assert_failed(uint8_t* file, uint32_t line)
{


}

#endif

 

Ссылка на комментарий
Поделиться на другие сайты

42 минуты назад, elki сказал:

Контроллер тактируется от внешнего кварца?

Да, тактирование выставлено точь в точь. как на 1000 уроков в инете. 72мГц. Кварц на 8.

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Блин, да что вы тупите с этим кубом? Вот весь код!

#include "stm32f10x.h" 

#define LED_H (GPIOC->BSRR = GPIO_BSRR_BR13)
#define LED_L (GPIOC->BSRR = GPIO_BSRR_BS13)

volatile unsigned int SysTickDelay;

void _delay_ms(uint32_t Val){
	SysTickDelay = Val;
	while (SysTickDelay != 0) {};
}

//------------------------------------------------------------------------
void SysTick_Handler(void){
   if (SysTickDelay != 0){
      SysTickDelay--;
   }
}

int main(){
  
//LEDs_INIT; 
GPIOC->CRH &= ~GPIO_CRH_CNF13; //
GPIOC->CRH |=  GPIO_CRH_MODE13;	
	
// SysTick INIT
SysTick_Config(72000000/1000);//1ms 
  
  while(1){
    LED_H;
    _delay_ms(1000);
    LED_L;
    _delay_ms(1000);
  }
}

Во сколько раз он короче и более читаем?! Написан руками за минуту, без калокуба! А куб годится лишь на то, чтобы посмотреть на каких выводах висит периферия!

Ссылка на комментарий
Поделиться на другие сайты

Похоже скоро в каждой ветке по стм будет одна страница по теме и 10 про то как лучше инициализировать контроллер))

 

ТС написал же, что не очень знаком с языком С, а без знаний то что предлагает @BARS_ для него будет еще сложнее чем просто в кубе мышкой потыкать и получить результат.

Изменено пользователем elki
Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, elki сказал:

не очень знаком с языком С

Куб здесь тоже не поможет. Он настроит периферию (криво и через ж...),  а дальше уже нужны будут тем самые знания С, с которым автор не очень знаком. Без этого никуда не деться.

Ссылка на комментарий
Поделиться на другие сайты

Абсолютно с Вами согласен без знания С будет не реально заставить работать периферию как надо. Тем более разобраться в портянке от куба)

В данный момент у него задача мигнуть светодиодом и это можно сделать кубом, пусть даже с излишним кодом, более сложные действия заставят ТС разбираться сначала в языке С потом тыкать кнопки в кубе или писать инициализацию руками.

Ссылка на комментарий
Поделиться на другие сайты

Есть подозрение что CooCox компилит пустой main.c. Хотя он из проекта удален. А тот, что сгенерирован кубом не берет. Т.к. что бы не делалось - размер выдаваемого hex всегда одинаков...

Как указать на нужный main.c?

Ссылка на комментарий
Поделиться на другие сайты

попробуйте тот же код что в первом посте скомпилировать в Keil. Я по нему пробежался и он вполне рабочий. Keil бесплатно качается с официального сайта. Ну или с торрентов заодно с таблеткой.

"Калокуб" вполне себе нормальный инструмент кстати. Нынче в нем даже появилась опция - генерировать регистровый код. Так что преимущества работы руками сошли на нет по сути. Код компилируется очень компактно.

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, mail_robot сказал:

преимущества работы руками сошли на нет по сути.

За то время, что я буду тыкать кнопки в кубе и вычищать его код, я напишу все руками...

Ссылка на комментарий
Поделиться на другие сайты

вы предлагаете им запретить? И заставить их думать лучше и быстрее? Срочно поднять IQ нации?

как могут, так и лезут. И хорошо, что хоть как то пытаются, а не синячат в подъездах.

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

15 часов назад, BARS_ сказал:

Просто новички пытаются лезть в МК, не зная ничего больше

Барс, тебе сколько лет? Ведешь себя на 16. Мы все поняли что ты ультра мастер и гуру. Но, если по сути помочь ничем не можешь, то не надо через пост здесь светиться.

Я в жизни занимаюсь совершенно другим, а МК это моё хобби. Как хочу - так и изучаю. Сюда пришел помощи попросить у тех, кто прошел такой же путь и наступал уже на те же грабли.

Ссылка на комментарий
Поделиться на другие сайты

41 минуту назад, Денис Горичевский сказал:

если по сути помочь ничем не можешь,

Серьезно? Я тебе дал ГОТОВЫЙ, РАБОЧИЙ код! Осталось только включить мозги и потрать пол часа на то, чтобы разобраться! Причем это будет в разы проще, чем в коде калокуба.

42 минуты назад, Денис Горичевский сказал:

МК это моё хобби

Это тоже было моим хобби и начинал я еще с AVR, а теперь приносит неплохой доход. А если бы я пользовался чем-то вроде калокуба, то и вопросы сейчас такие же задавал.

17 часов назад, Денис Горичевский сказал:

Есть подозрение что CooCox компилит пустой main.c

А что, перенести туда код из кубического main религия не позволяет? Чего вы проблемы на пустом месте создаете?

4 часа назад, mail_robot сказал:

вы предлагаете им запретить?

Я предлагаю им начать с азов, а не тупых вопросов. Неужели так трудно открыть учебник по Си и прочесть пару глав?

 

Ссылка на комментарий
Поделиться на другие сайты

59 минут назад, BARS_ сказал:

Я предлагаю им начать с азов, а не тупых вопросов. Неужели так трудно открыть учебник по Си и прочесть пару глав?

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

Еще полезно выучить ассемблер, хоть какой-нибудь, но лучше именно на целевое ядро чтобы понимать выхлоп дизассемблера и уметь соптимизировать особо тормозной кусок.

Ну и можно прямым текстом советовать новичкам начать с Кернигана и Ритчи + gcc / mingw / borlandC (последний дико устарел, конечно, но для освоения хорош)

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

Если для кого-то еще актуально. Столкнулся с той же проблемой. Полдня убил. Решение оказалось до смешного простым - после внесения изменения в main.c надо сохранить этот файл, и только после этого все компилировать.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...