Денис Горичевский

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

24 сообщения в этой теме

Ни как не заставлю мигать светодиод на 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

 

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
42 минуты назад, elki сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GOR23    30

Нужно понять что именно не работает, в отладчике программа работает? в hardFault не вылетает? Светодиод точно на том порту? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
elki    60

После прошивки контроллера ресет ему делаете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Пипец, там 10 строк кода надо чтобы мигать диодом. А куб насовал туда...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
elki    60

Покажите скрин вкладки тактирования в кубе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

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

#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);
  }
}

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
elki    60

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529
3 минуты назад, elki сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
elki    60

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

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

Поделиться сообщением


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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529
5 минут назад, Денис Горичевский сказал:

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

Создать проект по человечески, РУКАМИ. Код я выше дал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 163

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529
2 минуты назад, mail_robot сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529

Так надо к этому стремиться, а не пускать слюни возле куба...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529
3 минуты назад, mail_robot сказал:

новичков

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 163

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 часов назад, BARS_ сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    529
41 минуту назад, Денис Горичевский сказал:

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

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

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

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

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

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

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    248
59 минут назад, BARS_ сказал:

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

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

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

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

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...