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

GD32F103VET6 Проблемы.

Добрый день

Началось все как обычно вместо stm запаяли gd

Программа не заработала

стал разбираться при подключении STLINK Utility вижу такую картину:

09:01:30 : ST-LINK SN : 39FF65064243383924581057
09:01:30 : V2J37S7
09:01:30 : Connected via SWD.
09:01:30 : SWD Frequency = 4,0 MHz.
09:01:30 : Connection mode : Connect Under Reset.
09:01:30 : Device ID:0x414 
09:01:30 : Device flash Size : 512KBytes
09:01:30 : Device family :STM32F10xx High-density
09:01:40 : Disconnected from device.
09:01:40 : Connection to device is lost: check power supply and debug connection.
09:01:40 : If the target is in low power mode, please enable "Debug in Low Power mode" option from Target->settings menu.
 

Подключается и через 10 секунд теряет соединение, причем можно прошивку успеть зашить.

Потом не подключается даже после сброса по питанию целевой платы, чтобы подключилось вновь нужно отключить stlink от usb.

ps проверил на двух экземплярах плат. 

Что это может быть?

при этом GD32f103RET6 на других платах работают хорошо

Перепроверил. STLINK ведет себя также, но зашитая программа работает.

Spoiler
static void Init(void)
{
  volatile blt_int32u StartUpCounter = 0, HSEStatus = 0;
  blt_int32u pll_multiplier;

  /* set HSION bit */
  RCC->CR |= (blt_int32u)0x00000001;
  /* reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
  RCC->CFGR &= (blt_int32u)0xF8FF0000;
  /* reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (blt_int32u)0xFEF6FFFF;
  /* reset HSEBYP bit */
  RCC->CR &= (blt_int32u)0xFFFBFFFF;
  /* reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
  RCC->CFGR &= (blt_int32u)0xFF80FFFF;
  /* disable all interrupts and clear pending bits  */
  RCC->CIR = 0x009F0000;
  /* enable HSE */    
  RCC->CR |= ((blt_int32u)RCC_CR_HSEON);
  /* wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } 
  while((HSEStatus == 0) && (StartUpCounter != 15000));
  /* check if time out was reached */
  if ((RCC->CR & RCC_CR_HSERDY) == RESET)
  {
    /* cannot continue when HSE is not ready */
    ASSERT_RT(BLT_FALSE);
  }
  
  /* enable flash prefetch buffer */
  FLASH->ACR |= FLASH_ACR_PRFTBE;
  /* reset flash wait state configuration to default 0 wait states */
  FLASH->ACR &= (blt_int32u)((blt_int32u)~FLASH_ACR_LATENCY);
  /* configure 2 flash wait states */
  FLASH->ACR |= (blt_int32u)FLASH_ACR_LATENCY_2;    
  
  /* HCLK = SYSCLK */
  RCC->CFGR |= (blt_int32u)RCC_CFGR_HPRE_DIV1;
  /* PCLK2 = HCLK/2 */
  RCC->CFGR |= (blt_int32u)RCC_CFGR_PPRE2_DIV2;
  /* PCLK1 = HCLK/2 */
  RCC->CFGR |= (blt_int32u)RCC_CFGR_PPRE1_DIV2;
  /* reset PLL configuration */
  RCC->CFGR &= (blt_int32u)((blt_int32u)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | \
                                          RCC_CFGR_PLLMULL));
  /* assert that the pll_multiplier is between 2 and 16 */
  ASSERT_CT((BOOT_CPU_SYSTEM_SPEED_KHZ/BOOT_CPU_XTAL_SPEED_KHZ) >= 2);
  ASSERT_CT((BOOT_CPU_SYSTEM_SPEED_KHZ/BOOT_CPU_XTAL_SPEED_KHZ) <= 16);
  /* calculate multiplier value */
  pll_multiplier = BOOT_CPU_SYSTEM_SPEED_KHZ/BOOT_CPU_XTAL_SPEED_KHZ;
  /* convert to register value */
  pll_multiplier = (blt_int32u)((pll_multiplier - 2) << 18);
  /* set the PLL multiplier and clock source */
  RCC->CFGR |= (blt_int32u)(RCC_CFGR_PLLSRC_HSE | pll_multiplier);
  /* enable PLL */
  RCC->CR |= RCC_CR_PLLON;
  /* wait till PLL is ready */
  while((RCC->CR & RCC_CR_PLLRDY) == 0)
  {
  }
  /* select PLL as system clock source */
  RCC->CFGR &= (blt_int32u)((blt_int32u)~(RCC_CFGR_SW));
  RCC->CFGR |= (blt_int32u)RCC_CFGR_SW_PLL;    
  /* wait till PLL is used as system clock source */
  while ((RCC->CFGR & (blt_int32u)RCC_CFGR_SWS) != (blt_int32u)0x08)
  {
  }
  
  /* enable clocks for CAN transmitter and receiver pins (GPIOB and AFIO) */
  RCC->APB2ENR |= (blt_int32u)(0x00000008 | 0x00000001);
  /* configure CAN Rx (GPIOB8) as alternate function input pull-up */
  /* first reset the configuration */
  GPIOB->CRH &= ~(blt_int32u)((blt_int32u)0xf << 0);
  /* CNF8[1:0] = %10 and MODE8[1:0] = %00 */
  GPIOB->CRH |= (blt_int32u)((blt_int32u)0x8 << 0);
  /* configure CAN Tx (GPIOB9) as alternate function push-pull */
  /* first reset the configuration */
  GPIOB->CRH &= ~(blt_int32u)((blt_int32u)0xf << 4);
  /* CNF9[1:0] = %10 and MODE9[1:0] = %11 */
  GPIOB->CRH |= (blt_int32u)((blt_int32u)0xb << 4);
  /* remap CAN1 pins to PortB */
  AFIO->MAPR &= ~(blt_int32u)((blt_int32u)0x3 << 13);
  AFIO->MAPR |=  (blt_int32u)((blt_int32u)0x2 << 13);
  /* enable clocks for CAN controller peripheral */
  RCC->APB1ENR |= (blt_int32u)0x02000000;

} /*** end of Init ***/

Виснет где-то в этой процедуре. Под отладкой проходит нормально.

Может есть какие-то мысли что может быть не так.

Изменено пользователем haker_fox
Длинный код нужно прятать под спойлер.

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


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

Ну так

Цитата

check power supply and debug connection.


Что там с битом аппаратного старта вачдога в байтах опций?

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


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

Да.

Еще, например, мб где-то GPIO криво настраиваются, что аж SWD-пины затрагиваются.

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


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

34 minutes ago, mitya1698 said:

Началось все как обычно вместо stm запаяли gd

Программа не заработала

Чуток не по теме, но неужели она должна работать? И даже если заработает, это разве гарант того, что работать будет надёжно? Впрочем, у Вас уже есть подтверждение, что так делать нельзя.

34 minutes ago, mitya1698 said:

Может есть какие-то мысли что может быть не так.

Я скажу банальность, но это не означает, что её не нужно повторять: тут всё может быть не так! GD32F - это другой микроконтроллер, это не клон и не аналог микроконтроллера STM32F. И писать программу для этого микроконтроллера нужно с нуля. Аппаратную часть по крайней мере. Мы у себя таки делаем...

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


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

Провел еще экспериментов.

1 поменял образец STLINK с другим не отваливается, хотя первый стабильно работает с STM.

2 есть образцы платы с GD32F103VET6 успешно работающие.

3 если в "больной" GD залить прошивку, то по включению питания не работает, но если подключиться STLINK и сделать System Reset или Core Reset то стартует

4 сброс выводом RST не помогает.

В 13.10.2023 в 10:08, haker_fox сказал:

тут всё может быть не так! GD32F - это другой микроконтроллер, это не клон и не аналог микроконтроллера STM32F.

Да, это я знаю, но изучая мануал в инициализации пока не нашел видимых проблем, и на форуме тоже не находили в частности в блоке CAN и его инициализации по тактированию

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


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

Официальный STLINK сделан для работы только с МК от ST. Поддерживать камни других производителей он не обязан.

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


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

1 hour ago, mitya1698 said:

но изучая мануал в инициализации пока не нашел видимых проблем

Если бы это было так, то Вашей темы не возникло, не так ли?

16 minutes ago, Edit2007 said:

Официальный STLINK сделан для работы только с МК от ST.

Несколько на грани холивара, а зачем он нужен? При работе с STM32 и GD32 я ни разу не пользовался "специальными" отладчками. Обычный J-Link за 6 т.р. выполняет свои функции отлично.

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


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

В 13.10.2023 в 11:43, haker_fox сказал:

а зачем он нужен?

ну он есть, зачем его менять на Jlink 

 

В 13.10.2023 в 11:43, haker_fox сказал:

то Вашей темы не возникло, не так ли?

да, вот ищу различия пока не преуспел.

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


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

  /* enable PLL */
  RCC->CR |= RCC_CR_PLLON;

  for(StartUpCounter = 0; StartUpCounter < 10000; StartUpCounter++)
  {
  }
  
  /* wait till PLL is ready */
  while((RCC->CR & RCC_CR_PLLRDY) == 0)
  {
  }

после включения PLL добавил паузу - заработало. Хотя дальше проверка на PLLReady есть странно.

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


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

1 час назад, mitya1698 сказал:

после включения PLL добавил паузу - заработало. Хотя дальше проверка на PLLReady есть странно.

Так это ж Ваш код:wink: И все же считаю, что это не решение проблемы, а устранение симптомов.

Начните с этого документа:

Цитата
  • Start-up time, there is difference between GD32 and STM32, to reset MCU accurately, the start-up time should be optimized.
  • ...
  • It is recommend to connect 10K pull up resistance to SWDIO and 10K pull down resistance to SWCLK, shorten the connect line between emulator and board and download speed is configured to 4MHz below, so as to increase anti-interference and avoid download error.

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


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

начал, похоже моё 🙂

Почти по рекомендации исправил.

1. Issue:crystal oscillator start up timer modify reason Start-up time, there is difference between GD32 and STM32, to reset MCU accurately, the start-up time should be optimized. solution change

#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)

to #define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)

note:start-up time macro location:

1, lib 3.0 later, the macro is located in stm32f10x.h

2, lib 3.0 previous, the macro is located in stm32f10x_rcc.

type GD32F10x、GD32F1x0

 

Подтяжки на boot и swd ставил всегда, и на stm.

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


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

В 13.10.2023 в 09:34, mitya1698 сказал:

 

Подключается и через 10 секунд теряет соединение, причем можно прошивку успеть зашить.

Потом не подключается даже после сброса по питанию целевой платы, чтобы подключилось вновь нужно отключить stlink от usb.

Вы разобрались с причинам этого явления?

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


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...