STM32CubeIDE (вопросы и ответы)

Будем думать, решать. Без прокси в наше время никуда)

не, это не VPN, это proxy
Разница довольно существенная, там на сайте есть “Вопросы-ответы”, стоит почитать

обратите внимание, это вы открыли цены на IP6. Для того чтобы подключатся к любым сайтам, вам нужно IP4. Там цены немного другие

При этом на самой плате рядом со светодиодом написано PB2, и на АлиЭкспрессе в описании товара тоже написано. Но я тоже это только потом увидел, и у меня разобраться с этим заняло больше 15 минут :slight_smile:

Знаю только, что IPv6 круче IPv4, т.к. 6>4…

Вопрос знатокам!
В Кубе отладил отладку(масло масляное). Вроде фурычит, регистры показывает, а вот такты и время не могу понять где смотреть. Где это искать?
А так же не совсем понятна структура файлов. В какой-нибудь Студии для AVR всё просто: main.h и main.c, к которым подключены avrio.h и куча своих. В Кубе же непонятно что к чему подключено и где объявлено. Обработчики прерываний-то нашёл, но как-то некошерно оттуда писать вызов в свой файл *.c
Важные глобальные дефайны тоже не понятно куда писать чтоб видимость на весь проект была.

Мне пока не нужно было, не искал. Но где-то в отладке должно быть…

А по мне всё как раз понятно. Что не понятного? Две папки Inc и Src.

Так в main же область есть прямо подписанная, что для дефайнов ))

Разобрался с файлами наконец) Всё аналогично, это я через через опу смотрел.
Осталось время найти.

Насколько я знаю только через DWT . По другому вроде нельзя.
по крайне мере нигде нема

Можете в майне или в своем файле просто переопределить …
Прерывания сделаны как weak функции , находятся в файле startup_stm…

например у меня



.......................................................



 .weak      EXTI2_IRQHandler         
   .thumb_set EXTI2_IRQHandler,Default_Handler 
                 
   .weak      EXTI3_IRQHandler         
   .thumb_set EXTI3_IRQHandler,Default_Handler
                        
   .weak      EXTI4_IRQHandler         
   .thumb_set EXTI4_IRQHandler,Default_Handler
                  
   .weak      DMA1_Stream0_IRQHandler               
   .thumb_set DMA1_Stream0_IRQHandler,Default_Handler
         
   .weak      DMA1_Stream1_IRQHandler               
   .thumb_set DMA1_Stream1_IRQHandler,Default_Handler
                  
   .weak      DMA1_Stream2_IRQHandler               
   .thumb_set DMA1_Stream2_IRQHandler,Default_Handler

..............................................................

а я в своем майне использую для тача



/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "fatfs.h"
#include "i2c.h"
#include "sdio.h"
#include "spi.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
#include "fsmc.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
//EEPROM
#include "s_var.h"

#include "fonts.h"
#include "stdio.h"
#include "w25qxx.h"
#include "24LC02.h"
#include "GT911.h"
#include "IMAGE.h"
#include "spi_7796.h"
#include "SSD1963.h"
#include "SSD1963_LL.h"
#include "keys.h"
#include "menu.h"
#include "PICTURESSD.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

GT911Touch_TypeDef GT911Touch[5];

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */





/* USER CODE END PV */

  /* USER CODE BEGIN 2 */

	LCD_Init();
	LCD_DrawFullScreen(BLACK);
	HAL_Delay(50);
	GT911_Init();
	W25qxx_Init();
	SD_init();
//	W25qxx_EraseChip();


	__HAL_TIM_CLEAR_FLAG(&htim7, TIM_SR_UIF);
	HAL_TIM_Base_Start_IT(&htim7);
	NVIC_DisableIRQ(EXTI4_IRQn);
......................................


  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */

input_sort(profil_f);


	 while (1)
	  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	}
  /* USER CODE END 3 */
}
...............................................
..........................................

/* USER CODE BEGIN 4 */

void EXTI4_IRQHandler(void)
{
// gt911
	TouchCount911 = GT911_ReadTouch(&GT911Touch[0]);
	EXTI->PR |= TOUCH_IRQ_Pin;
	NVIC_ClearPendingIRQ(EXTI4_IRQn);
	my_touch.XX = GT911Touch[0].XCoordinate;
	my_touch.YY = GT911Touch[0].YCoordinate;

	if ((my_touch.stat == 5) && (TouchCount911 > 0))
	{
		//my_touch.XX = GT911Touch[0].XCoordinate;
		//my_touch.YY = GT911Touch[0].YCoordinate;
		my_touch.stat = 6;
		NVIC_DisableIRQ(EXTI4_IRQn);
	} 
}

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

Вон чё! Поняна)
У меня тоже по файлам раскидано обычно, просто тут их по-умолчанию дохера и больше, вот и растерялся)
У самого самый большой с-файл строк 80 наверно.

Это чего за зверь такой?

 #define    DWT_CYCCNT    *(volatile uint32_t*)0xE0001004
  #define    DWT_CONTROL   *(volatile uint32_t*)0xE0001000
  #define    SCB_DEMCR     *(volatile uint32_t*)0xE000EDFC

  char str[16] = {0,};
  uint32_t count_tic = 0;

  SCB_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;// разрешаем использовать DWT
  DWT_CONTROL|= DWT_CTRL_CYCCNTENA_Msk; // включаем счётчик
  DWT_CYCCNT = 0;// обнуляем счётчик

  // здесь кусок измеряемого участка программы

  count_tic = DWT_CYCCNT; // кол-во тактов
  snprintf(str, 16, "Takt %lu\n", count_tic);
  HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), 1000);

это для cortex m3
[Время выполнения кода в STM32.. | Embedded Systems | VK]

Вот тут платформо-независимое…,
но я сам не проверял…
я сейчас на 4 кортексе - пока не было потребности…
p/s CMSIS соответственно нужны будут библиотеки CMSIS в кубе для Вашего ядра

Вобщем поковыряюсь. Но если вдруг нет средств прям “из коробки”, то это странно. Для меня измерять время и такты на втором месте после просмотра переменных.

Меня тоже удивило отсутствие в HAL делеев менее 1 мс. Надо как то с этим жить ))

У эстэмов есть систик - регистр который тикает независимо ни от чего и ты в любой момент можешь вытащить что там натикало.

HAL_Delay от него же данные получает?
Но чтобы сами тики получить - нужно к регистрам лезть напрямую?

Топая по шагам - тики будут неверные.
Надо точки останова делать и вычислять разность между отрезками…
С dma тоже самое … выстрелит всё что есть за один шаг …

На https://forum.easyelectronics.ru/index.php
Это часто калом называют.
Не надо с этим жить, проще изучить регистры stm32.

Да уж… Надо понимать там куча периферии на разных частотах. В какой-нибудь ххх-Студии для авр эмуляцию запустил и вот:


Но как подсказал @karasik_mk1 , с DWT почти то же самое.