STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Я хочу в этот сгенерённый кубом код добавить, скажем свою функцию или в какую-то из существующих, которая установит адреса source, destination, сколько слов слать и установит DMA->CCR бит EN7 в единицу. Ну и хотелось бы, чтобы при смене канала ПДП мои вмешательства тут были минимальными.
Спойлер

Код: Выделить всё

/**
  ******************************************************************************
  * File Name          : TIM.c
  * Description        : This file provides code for the configuration
  *                      of the TIM instances.
  ******************************************************************************
  * This notice applies to any and all portions of this file
  * that are not between comment pairs USER CODE BEGIN and
  * USER CODE END. Other portions of this file, whether 
  * inserted by the user or by software development tools
  * are owned by their respective copyright owners.
  *
  * Copyright (c) 2018 STMicroelectronics International N.V. 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
  * modification, are permitted, provided that the following conditions are met:
  *
  * 1. Redistribution of source code must retain the above copyright notice, 
  *    this list of conditions and the following disclaimer.
  * 2. Redistributions in binary form must reproduce the above copyright notice,
  *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
  * 3. Neither the name of STMicroelectronics nor the names of other 
  *    contributors to this software may be used to endorse or promote products 
  *    derived from this software without specific written permission.
  * 4. This software, including modifications and/or derivative works of this 
  *    software, must execute solely and exclusively on microcontroller or
  *    microprocessor devices manufactured by or for STMicroelectronics.
  * 5. Redistribution and use of this software other than as permitted under 
  *    this license is void and will automatically terminate your rights under 
  *    this license. 
  *
  * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" 
  * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT 
  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
  * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
  * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT 
  * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "tim.h"

#include "dma.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

TIM_HandleTypeDef htim4;
DMA_HandleTypeDef hdma_tim4_up;

/* TIM4 init function */
void MX_TIM4_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;

  htim4.Instance = TIM4;
  htim4.Init.Prescaler = 9;
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim4.Init.Period = 20000;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM4)
  {
  /* USER CODE BEGIN TIM4_MspInit 0 */

  /* USER CODE END TIM4_MspInit 0 */
    /* TIM4 clock enable */
    __HAL_RCC_TIM4_CLK_ENABLE();
  
    /* TIM4 DMA Init */
    /* TIM4_UP Init */
    hdma_tim4_up.Instance = DMA1_Channel7;
    hdma_tim4_up.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_tim4_up.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_tim4_up.Init.MemInc = DMA_MINC_ENABLE;
    hdma_tim4_up.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
    hdma_tim4_up.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
    hdma_tim4_up.Init.Mode = DMA_CIRCULAR;
    hdma_tim4_up.Init.Priority = DMA_PRIORITY_LOW;
    if (HAL_DMA_Init(&hdma_tim4_up) != HAL_OK)
    {
      _Error_Handler(__FILE__, __LINE__);
    }

    __HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_UPDATE],hdma_tim4_up);

    /* TIM4 interrupt Init */
    HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM4_IRQn);
  /* USER CODE BEGIN TIM4_MspInit 1 */

  /* USER CODE END TIM4_MspInit 1 */
  }
}

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM4)
  {
  /* USER CODE BEGIN TIM4_MspDeInit 0 */

  /* USER CODE END TIM4_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_TIM4_CLK_DISABLE();

    /* TIM4 DMA DeInit */
    HAL_DMA_DeInit(tim_baseHandle->hdma[TIM_DMA_ID_UPDATE]);

    /* TIM4 interrupt Deinit */
    HAL_NVIC_DisableIRQ(TIM4_IRQn);
  /* USER CODE BEGIN TIM4_MspDeInit 1 */

  /* USER CODE END TIM4_MspDeInit 1 */
  }
} 

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/**
  * @}
  */

/**
  * @}
  */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 
единственное отличие, тут я включил PLL поэтому таймеру включил немного предделитель
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

uldemir, в вашем же коде :

Код: Выделить всё

    
      DMA1_Channel7->CCR |= DMA_CCR7_MINC | DMA_CCR7_MSIZE_1 | DMA_CCR7_PSIZE_1 | DMA_CCR7_CIRC | DMA_CCR7_DIR | 
      DMA_CCR7_TCIE; // (6)  
      DMA1_Channel7->CCR |= DMA_CCR7_EN; // (7)

Откуда взялся индекс в определении бит ?


DMA_CCR7_MINC


Здесь меняем DMA1_Channel3 на DMA1_Channel_X
В хэдере пишем

Код: Выделить всё

#define  DMA1_Channel_X DMA1_Channel3 
Вот только что в калокубе, что в любом случае, следить за соответствие реквестов каналам придется самому...

Код: Выделить всё

DMA1_Channel_X->CPAR = (uint32_t)&GPIOA->BSSR;     // DMA channel x peripheral address register
DMA1_Channel_X->CMAR = (uint32_t)Data_Buffer;     // DMA channel x memory address register    
DMA1_Channel_X->CNDTR = DIGITS;                   // DMA channel x number of data register

DMA1_Channel_X->CCR  |=  DMA_CCR_MSIZE_0;         // Memory size 16 bit
DMA1_Channel_X->CCR  |=  DMA_CCR_PSIZE_0;         // Peripheral size 16 bit

DMA1_Channel_X->CCR  |=  DMA_CCR_PL_1;            // Channel Priority level High 
DMA1_Channel_X->CCR  |=  DMA_CCR_MINC;            // Memory increment mode 
DMA1_Channel_X->CCR  |=  DMA_CCR_CIRC;            // Circular mode
DMA1_Channel_X->CCR  |=  DMA_CCR_DIR;             // Data transfer direction Memory -> Peripheral

DMA1_Channel_X->CCR  |=  DMA_CCR_EN;              // Channel enable
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

[uquote="dosikus",url="/forum/viewtopic.php?p=3457339#p3457339"]uldemir, в вашем же коде :
Откуда взялся индекс в определении бит ?
DMA_CCR7_MINC[/uquote]
из хидеров, вестимо: stm32f10x.h

Код: Выделить всё

/*******************  Bit definition for DMA_CCR7 register  *******************/
#define  DMA_CCR7_EN                         ((uint16_t)0x0001)            /*!< Channel enable */
Что поделать, если структура регистров такая. В stm32f030 всё было проще и логичнее:

Код: Выделить всё

	DMA1_Channel1->CPAR = (uint32_t) (&(ADC1->DR)); /* (3) */
	DMA1_Channel1->CMAR = (uint32_t)(photo_sensor); /* (4) */
	DMA1_Channel1->CNDTR = 8; // NUMBER_OF_ADC_CHANNEL; /* (5) */
	DMA1_Channel1->CCR |= DMA_CCR_MINC | DMA_CCR_CIRC;
	DMA1_Channel1->CCR |= DMA_CCR_TCIE; /* (6) */
	DMA1_Channel1->CCR |= DMA_CCR_EN; /* (7) */
Вот хотелось бы обойтись без дефайнов. Нельзя ли где в структуре DMA_HandleTypeDef hdma_tim4_up найти место куда вставить требуеиое и вызвать какую функцию для запуска? На казусовском примере используется какая-то строктура DMA_InitTypeDef, которую здесь я не наблюдаю или не могу понять где оно и как связано со сгенерённым.

Нашел в структуре hdma_tim4_up.DmaBaseAddress, но не могу сделать присваивание - он имеет какой-то странный тип (DMA_typedef *) - кто это такой и как?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

[uquote="uldemir",url="/forum/viewtopic.php?p=3457351#p3457351"]На казусовском примере используется какая-то строктура DMA_InitTypeDef[/uquote]

Где? По моей ссылке нет SPL хрени.


[uquote="uldemir",url="/forum/viewtopic.php?p=3457351#p3457351"]Что поделать, если структура регистров такая. В stm32f030 всё было проще и логичнее:[/uquote]

Для расширения кругозора внимательно изучаем stm32f10x.h,...

Код: Выделить всё

/*******************  Bit definition for DMA_CCR1 register  *******************/
#define  DMA_CCR1_EN                         ((uint16_t)0x0001)            /*!< Channel enable*/
#define  DMA_CCR1_TCIE                       ((uint16_t)0x0002)            /*!< Transfer complete interrupt enable */
#define  DMA_CCR1_HTIE                       ((uint16_t)0x0004)            /*!< Half Transfer interrupt enable */
#define  DMA_CCR1_TEIE                       ((uint16_t)0x0008)            /*!< Transfer error interrupt enable */
#define  DMA_CCR1_DIR                        ((uint16_t)0x0010)            /*!< Data transfer direction */
#define  DMA_CCR1_CIRC                       ((uint16_t)0x0020)            /*!< Circular mode */
#define  DMA_CCR1_PINC                       ((uint16_t)0x0040)            /*!< Peripheral increment mode */
#define  DMA_CCR1_MINC                       ((uint16_t)0x0080)            /*!< Memory increment mode */

#define  DMA_CCR1_PSIZE                      ((uint16_t)0x0300)            /*!< PSIZE[1:0] bits (Peripheral size) */
#define  DMA_CCR1_PSIZE_0                    ((uint16_t)0x0100)            /*!< Bit 0 */
#define  DMA_CCR1_PSIZE_1                    ((uint16_t)0x0200)            /*!< Bit 1 */

#define  DMA_CCR1_MSIZE                      ((uint16_t)0x0C00)            /*!< MSIZE[1:0] bits (Memory size) */
#define  DMA_CCR1_MSIZE_0                    ((uint16_t)0x0400)            /*!< Bit 0 */
#define  DMA_CCR1_MSIZE_1                    ((uint16_t)0x0800)            /*!< Bit 1 */

#define  DMA_CCR1_PL                         ((uint16_t)0x3000)            /*!< PL[1:0] bits(Channel Priority level) */
#define  DMA_CCR1_PL_0                       ((uint16_t)0x1000)            /*!< Bit 0 */
#define  DMA_CCR1_PL_1                       ((uint16_t)0x2000)            /*!< Bit 1 */

#define  DMA_CCR1_MEM2MEM                    ((uint16_t)0x4000)            /*!< Memory to memory mode */



/*******************  Bit definition for DMA_CCR7 register  *******************/
#define  DMA_CCR7_EN                         ((uint16_t)0x0001)            /*!< Channel enable */
#define  DMA_CCR7_TCIE                       ((uint16_t)0x0002)            /*!< Transfer complete interrupt enable */
#define  DMA_CCR7_HTIE                       ((uint16_t)0x0004)            /*!< Half Transfer interrupt enable */
#define  DMA_CCR7_TEIE                       ((uint16_t)0x0008)            /*!< Transfer error interrupt enable */
#define  DMA_CCR7_DIR                        ((uint16_t)0x0010)            /*!< Data transfer direction */
#define  DMA_CCR7_CIRC                       ((uint16_t)0x0020)            /*!< Circular mode */
#define  DMA_CCR7_PINC                       ((uint16_t)0x0040)            /*!< Peripheral increment mode */
#define  DMA_CCR7_MINC                       ((uint16_t)0x0080)            /*!< Memory increment mode */

#define  DMA_CCR7_PSIZE                      ((uint16_t)0x0300)            /*!< PSIZE[1:0] bits (Peripheral size) */
#define  DMA_CCR7_PSIZE_0                    ((uint16_t)0x0100)            /*!< Bit 0 */
#define  DMA_CCR7_PSIZE_1                    ((uint16_t)0x0200)            /*!< Bit 1 */

#define  DMA_CCR7_MSIZE                      ((uint16_t)0x0C00)            /*!< MSIZE[1:0] bits (Memory size) */
#define  DMA_CCR7_MSIZE_0                    ((uint16_t)0x0400)            /*!< Bit 0 */
#define  DMA_CCR7_MSIZE_1                    ((uint16_t)0x0800)            /*!< Bit 1 */

#define  DMA_CCR7_PL                         ((uint16_t)0x3000)            /*!< PL[1:0] bits (Channel Priority level) */
#define  DMA_CCR7_PL_0                       ((uint16_t)0x1000)            /*!< Bit 0 */
#define  DMA_CCR7_PL_1                       ((uint16_t)0x2000)            /*!< Bit 1 */

#define  DMA_CCR7_MEM2MEM                    ((uint16_t)0x4000)            /*!< Memory to memory mode enable */

И изучаем картинко из RM :

Изображение


И заодно думаем - что полезней калокуб или умение читать документацию.
Последний раз редактировалось dosikus Сб сен 15, 2018 12:31:06, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

все правильно он писал DMA1_Channel7->CCR |= DMA_CCR7_MINC
Че ему надо не пойму?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Oxford,
и ты туда же.
Снимаем розовые очки и сравниваем строчки:

Код: Выделить всё

#define  DMA_CCR1_MINC                       ((uint16_t)0x0080)            /*!< Memory increment mode */
#define  DMA_CCR7_MINC                       ((uint16_t)0x0080)            /*!< Memory increment mode */

А теперь, вуаля бит дефинишн из F0 :

Код: Выделить всё

/*******************  Bit definition for DMA_CCR register  ********************/
#define  DMA_CCR_EN                          ((uint32_t)0x00000001)        /*!< Channel enable                      */
#define  DMA_CCR_TCIE                        ((uint32_t)0x00000002)        /*!< Transfer complete interrupt enable  */
#define  DMA_CCR_HTIE                        ((uint32_t)0x00000004)        /*!< Half Transfer interrupt enable      */
#define  DMA_CCR_TEIE                        ((uint32_t)0x00000008)        /*!< Transfer error interrupt enable     */
#define  DMA_CCR_DIR                         ((uint32_t)0x00000010)        /*!< Data transfer direction             */
#define  DMA_CCR_CIRC                        ((uint32_t)0x00000020)        /*!< Circular mode                       */
#define  DMA_CCR_PINC                        ((uint32_t)0x00000040)        /*!< Peripheral increment mode           */
#define  DMA_CCR_MINC                        ((uint32_t)0x00000080)        /*!< Memory increment mode               */

#define  DMA_CCR_PSIZE                       ((uint32_t)0x00000300)        /*!< PSIZE[1:0] bits (Peripheral size)   */
#define  DMA_CCR_PSIZE_0                     ((uint32_t)0x00000100)        /*!< Bit 0                               */
#define  DMA_CCR_PSIZE_1                     ((uint32_t)0x00000200)        /*!< Bit 1                               */

#define  DMA_CCR_MSIZE                       ((uint32_t)0x00000C00)        /*!< MSIZE[1:0] bits (Memory size)       */
#define  DMA_CCR_MSIZE_0                     ((uint32_t)0x00000400)        /*!< Bit 0                               */
#define  DMA_CCR_MSIZE_1                     ((uint32_t)0x00000800)        /*!< Bit 1                               */

#define  DMA_CCR_PL                          ((uint32_t)0x00003000)        /*!< PL[1:0] bits(Channel Priority level)*/
#define  DMA_CCR_PL_0                        ((uint32_t)0x00001000)        /*!< Bit 0                               */
#define  DMA_CCR_PL_1                        ((uint32_t)0x00002000)        /*!< Bit 1                               */

#define  DMA_CCR_MEM2MEM                     ((uint32_t)0x00004000)        /*!< Memory to memory mode               */
Бинго!
Последний раз редактировалось dosikus Сб сен 15, 2018 12:35:49, всего редактировалось 1 раз.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Там 7 каналов ну числа у них одинаковые это понятно, но по правилам CMSIS правильно написано.
Что надо то сделать не пойму?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Он упирается что конфиг DMA у F1 и F0 разный.
Что мой код не подойдет для F1 и надо калокуб...

Ну и для слепо упоротых совместим картинко вместе :
Регистры конфига DMA у F0 и F1

Изображение

Изображение


[uquote="Oxford",url="/forum/viewtopic.php?p=3457365#p3457365"]Там 7 каналов ну числа у них одинаковые это понятно, но по правилам CMSIS правильно написано.[/uquote]
Нет не правильно, регистры идентичные и в F0 это уже исправлено.
Тут или править хэдер либо использовать любой из DMA_CCRx_XXX для любого канала.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Все там правильно не мути воду. Регистры идентичные, каналы разные вот и сделали описание для всех каналов. Будет работать и так и так, логика не поменяется. В более старых просто так было. От 2011 хедеры допустим там было для каждого свое, в 2014 уже убрали это и сделали одно описание регистра.

Изображение

Он упирается что конфиг DMA у F1 и F0 разный.
Что мой код не подойдет для F1 и надо калокуб...
А ну от этого вылечим, не первый и не последний поциент. У него зависимость острая, наркотическая, сидит на калокубе.
А че он там буробил про какую то структуру?
Последний раз редактировалось Oxford Сб сен 15, 2018 13:07:28, всего редактировалось 1 раз.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

[uquote="Oxford",url="/forum/viewtopic.php?p=3457377#p3457377"]Регистры идентичные, каналы разные вот и сделали описание для всех каналов.[/uquote]



Объясняю для только что прибывших - ему надо конфигурить любой канал .
Например так .

Код: Выделить всё

#define  DMA1_Channel_X DMA1_Channel3

DMA1_Channel_X->CCR  |=  DMA_CCR_MSIZE_0;         // Memory size 16 bit
DMA1_Channel_X->CCR  |=  DMA_CCR_PSIZE_0;         // Peripheral size 16 bit

DMA1_Channel_X->CCR  |=  DMA_CCR_PL_1;            // Channel Priority level High 
DMA1_Channel_X->CCR  |=  DMA_CCR_MINC;            // Memory increment mode 
DMA1_Channel_X->CCR  |=  DMA_CCR_CIRC;            // Circular mode
DMA1_Channel_X->CCR  |=  DMA_CCR_DIR;             // Data transfer direction Memory -> Peripheral

А если невнимательно читать RM, складывается ложное впечатление, что биты для каждого регистра конфига уникальны .
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Ну с битами понятно CCR регистр одинаковый. Дальше что.
Он не знает как это сделать? Решение нашли? Опять пишем SPL, калолибы?
Он хочет передавать в функцию номер канала и параметры?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Oxford, дождемся вопрошающего.

Да и насчет дефайнов - не нравятся, можно и как Oxford говорит передавать номер канала в функцию...
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Я бы не советовал заворачивать это в функции отдельные лишняя херня. Он и так буксует с ними. Когда программу прогаешь настроил каналы где надо и все.
А дефайны ему чем не угодили?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4906
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

a5021 писал(а):И получается полная хрень -- для того, чтобы полноценно использовать HAL, по хорошему, надо и сам HAL знать хорошо и знание железа никак не обойти
Я про HAL и не говорю. А вот LL вполне достоин того, чтобы на него взглянуть. Там всё сводится, по большому счёту, к дефайнам и встраиваемым функциям.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

WiseLord, не проще ли начать читать RM?
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Я не хочу писать DMA1_Channel7->CCR |= DMA_CCR7_MINC. Это я уже написал. Хочу написать интегрированно в сгенерённый кубом код. И чтобы он не поломался если я его тем же кубом перегенерю. Вдруг придумаю какую галочку поставить или снять. Потому как не хочется плодить разные сущности - часть HAL, часть CMSIS. Приведённый код - работает и уже полностью отлажен. Но хочется его интегрировать в другой проект, который сгенерён кубом. И вот те части, что управляются кубом - в частности TIM4, DMA, GPIO и может, что еще... вот RTC подключить не удалось - кейл не может скомпилировать - ругается на какую-то функцию (там внутри мелькает _LL_, хотя в опциях я поставил HAL и не нашел как сделать, чтобы никакого вывода на PC13 не шло.) - это я оставил свой CMSIS инициализацию и обработчик прерываний.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Мда, слов нет ...
Друг Кота
Аватара пользователя
Сообщения: 4906
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

[uquote="dosikus",url="/forum/viewtopic.php?p=3457401#p3457401"]WiseLord, не проще ли начать читать RM?[/uquote]А одно другому не мешает.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

uldemir писал(а):И чтобы он не поломался если я его тем же кубом перегенерю. Вдруг придумаю какую галочку поставить или снять.
Код при этом обычно ломается если вносить изменения в неразрешенных местах. :dont_know: Поэтому использую SPL. :)
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="uldemir",url="/forum/viewtopic.php?p=3457409#p3457409"]Хочу написать интегрированно в сгенерённый кубом код.[/uquote]
Если писать между отметками

Код: Выделить всё

/* USER CODE BEGIN nn */

и

/* USER CODE END nn */
то написать туда можно хоть роман в стихах, главное, чтобы он синтаксически-безупречно был оформлен. Куб ничего не тронет. Или тут не об этом?
Ответить

Вернуться в «ARM»