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

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

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

Сообщение Oxford »

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

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

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

Сообщение dosikus »

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

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

Изображение

Изображение


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

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

Сообщение Oxford »

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

Изображение

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

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

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

Сообщение 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, складывается ложное впечатление, что биты для каждого регистра конфига уникальны .
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

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

Сообщение Oxford »

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

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

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

Сообщение dosikus »

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

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

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

Сообщение Oxford »

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

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

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

Сообщение WiseLord »

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

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

Сообщение dosikus »

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

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

Сообщение uldemir »

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

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

Сообщение dosikus »

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

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

Сообщение WiseLord »

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

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

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

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

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

Сообщение a5021 »

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

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

/* USER CODE BEGIN nn */

и

/* USER CODE END nn */
то написать туда можно хоть роман в стихах, главное, чтобы он синтаксически-безупречно был оформлен. Куб ничего не тронет. Или тут не об этом?
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Это я знаю. И так и делаю. Простой вопрос - как установить, используя HAL, source, destination и count для DMA. Хотя бы destination aka CPAR соответствующего канала, так как есть надежда что HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef * htim, uint32_t * pData, uint16_t Length) выполнит два из трёх желаний.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="dosikus",url="/forum/viewtopic.php?p=3457382#p3457382"]Например так .

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

#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
[/uquote]
Никогда не понимал - на кой для каждого битового поля делать отдельное чтение-модификация-запись (LDR/ORR/STR) вместо просто записи всего слова сразу? :dont_know:

Без всяких калокубов и прочей хрени (STM32F429):
Спойлер

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

//csl.h (Chip Support Layer)
//------------
//DMA channel assignments
#define DMAREQ_S0_SPI3_RX       0
#define DMAREQ_S0_I2C1_RX       1
#define DMAREQ_S0_TIM4_CH1      2
#define DMAREQ_S0_I2S3_EXT_RX   3
#define DMAREQ_S0_UART5_RX      4
#define DMAREQ_S0_UART8_TX      5
#define DMAREQ_S0_TIM5_CH3      6
#define DMAREQ_S0_TIM5_UP       6
#define DMAREQ_S1_TIM2_CH3      3
#define DMAREQ_S1_TIM2_UP       3
#define DMAREQ_S1_UART3_RX      4
#define DMAREQ_S1_UART7_TX      5
#define DMAREQ_S1_TIM5_CH4      6
#define DMAREQ_S1_TIM5_TRIG     6
#define DMAREQ_S1_TIM6_UP       7
#define DMAREQ_S2_SPI3_RX       0
#define DMAREQ_S2_TIM7_UP       1
#define DMAREQ_S2_I2S3_EXT_RX   2
#define DMAREQ_S2_I2C3_RX       3
#define DMAREQ_S2_UART4_RX      4
#define DMAREQ_S2_TIM3_CH4      5
#define DMAREQ_S2_TIM3_UP       5
#define DMAREQ_S2_TIM5_CH1      6
#define DMAREQ_S2_I2C2_RX       7
#define DMAREQ_S3_SPI2_RX       0
#define DMAREQ_S3_TIM4_CH2      2
#define DMAREQ_S3_I2S2_EXT_RX   3
#define DMAREQ_S3_UART3_TX      4
#define DMAREQ_S3_UART7_RX      5
#define DMAREQ_S3_TIM5_CH4      6
#define DMAREQ_S3_TIM5_TRIG     6
#define DMAREQ_S3_I2C2_RX       7
#define DMAREQ_S4_SPI2_TX       0
#define DMAREQ_S4_TIM7_UP       1
#define DMAREQ_S4_I2S2_EXT_TX   2
#define DMAREQ_S4_I2C3_TX       3
#define DMAREQ_S4_UART4_TX      4
#define DMAREQ_S4_TIM3_CH1      5
#define DMAREQ_S4_TIM3_TRIG     5
#define DMAREQ_S4_TIM5_CH2      6
#define DMAREQ_S4_UART3_TX      7
#define DMAREQ_S5_SPI3_TX       0
#define DMAREQ_S5_I2C1_RX       1
#define DMAREQ_S5_I2S3_EXT_TX   2
#define DMAREQ_S5_TIM2_CH1      3
#define DMAREQ_S5_UART2_RX      4
#define DMAREQ_S5_TIM3_CH2      5
#define DMAREQ_S5_DAC0          7
#define DMAREQ_S6_I2C1_TX       1
#define DMAREQ_S6_TIM4_UP       2
#define DMAREQ_S6_TIM2_CH2      3
#define DMAREQ_S6_TIM2_CH4      3
#define DMAREQ_S6_UART2_TX      4
#define DMAREQ_S6_UART8_RX      5
#define DMAREQ_S6_TIM5_UP       6
#define DMAREQ_S6_DAC1          7
#define DMAREQ_S7_SPI3_TX       0
#define DMAREQ_S7_I2C1_TX       1
#define DMAREQ_S7_TIM4_CH3      2
#define DMAREQ_S7_TIM2_CH4      3
#define DMAREQ_S7_TIM2_UP       3
#define DMAREQ_S7_UART5_TX      4
#define DMAREQ_S7_TIM3_CH3      5
#define DMAREQ_S7_I2C2_TX       7
#define DMAREQ_S8_ADC1          0
#define DMAREQ_S8_ADC3          2
#define DMAREQ_S8_SPI1_RX       3
#define DMAREQ_S8_SPI4_RX       4
#define DMAREQ_S8_TIM1_TRIG     6
#define DMAREQ_S9_SAI1_A        0
#define DMAREQ_S9_DCMI          1
#define DMAREQ_S9_ADC3          2
#define DMAREQ_S9_SPI4_TX       4
#define DMAREQ_S9_UART6_RX      5
#define DMAREQ_S9_TIM1_CH1      6
#define DMAREQ_S9_TIM8_UP       7
#define DMAREQ_S10_TIM8_CH1     0
#define DMAREQ_S10_TIM8_CH2     0
#define DMAREQ_S10_TIM8_CH3     0
#define DMAREQ_S10_ADC2         1
#define DMAREQ_S10_SPI1_RX      3
#define DMAREQ_S10_UART1_RX     4
#define DMAREQ_S10_UART6_RX     5
#define DMAREQ_S10_TIM1_CH2     6
//#define DMAREQ_S10_TIM8_CH1     7
#define DMAREQ_S11_SAI1_A       0
#define DMAREQ_S11_ADC2         1
#define DMAREQ_S11_SPI5_RX      2
#define DMAREQ_S11_SPI1_TX      3
#define DMAREQ_S11_SDIO         4
#define DMAREQ_S11_SPI4_RX      5
#define DMAREQ_S11_TIM1_CH1     6
#define DMAREQ_S11_TIM8_CH2     7
#define DMAREQ_S12_ADC1         0
#define DMAREQ_S12_SAI1_B       1
#define DMAREQ_S12_SPI5_TX      2
#define DMAREQ_S12_SPI4_TX      5
#define DMAREQ_S12_TIM1_CH4     6
#define DMAREQ_S12_TIM1_TRIG    6
#define DMAREQ_S12_TIM1_COM     6
#define DMAREQ_S12_TIM8_CH3     7
#define DMAREQ_S13_SAI1_B       0
#define DMAREQ_S13_SPI6_TX      1
#define DMAREQ_S13_CRYP_OUT     2
#define DMAREQ_S13_SPI1_TX      3
#define DMAREQ_S13_UART1_RX     4
#define DMAREQ_S13_TIM1_UP      6
#define DMAREQ_S13_SPI5_RX      7
#define DMAREQ_S14_TIM1_CH1     0
#define DMAREQ_S14_TIM1_CH2     0
#define DMAREQ_S14_TIM1_CH3     0
#define DMAREQ_S14_SPI6_RX      1
#define DMAREQ_S14_CRYP_IN      2
#define DMAREQ_S14_SDIO         4
#define DMAREQ_S14_UART6_TX     5
//#define DMAREQ_S14_TIM1_CH3     6
#define DMAREQ_S14_SPI5_TX      7
#define DMAREQ_S15_DCMI         1
#define DMAREQ_S15_HASH_IN      2
#define DMAREQ_S15_UART1_TX     4
#define DMAREQ_S15_UART6_TX     5
#define DMAREQ_S15_TIM8_CH4     7
#define DMAREQ_S15_TIM8_TRIG    7
#define DMAREQ_S15_TIM8_COM     7

//board.h (распределение ресурсов платы)
//---------------------------------
//Распределение DMA-stream-ов
#define nDMASTR_UART1_TX     15
#define nDMASTR_UART1_RX     10
#define nDMASTR_UART5_TX     7
#define nDMASTR_UART5_RX     0
#define nDMASTR_UART6_TX     14
#define nDMASTR_UART6_RX     9
#define nDMASTR_SPI5_TX      12
#define nDMASTR_SPI5_RX      11
#define nDMASTR_SPI1_TX      13
#define nDMASTR_SPI1_RX      8
#define nDMASTR_I2C3_TX      4
#define nDMASTR_I2C3_RX      2
#define nDMASTR_DAC          5

//драйвер аудио-потока (aout.cpp):
//---------------------------------
#define dmaU   ((nDMASTR_DAC >> 3) ? &DMA2: &DMA1)
#define dmaS   (&dmaU->STREAM[nDMASTR_DAC & 7])
...
  dmaS->CR = 1 << DMA_CR_EN | 1 << DMA_CR_TEIE | 1 << DMA_CR_TCIE |
    1 << DMA_CR_DIR | 1 << DMA_CR_DBM | DMAPRI_DAC << DMA_CR_PL |
    1 << DMA_CR_MINC | 2 << DMA_CR_PSIZE | 2 << DMA_CR_MSIZE |
    concat(DMAREQ_S, nDMASTR_DAC, _DAC, concat(DAC_DMASTR, nDMASTR_DAC)) <<
    DMA_CR_CHSEL;
Как видно - даже EN вполне нормально ставится и запускается канал одновременно с программированием управляющих бит.
PS: concat(...) - макрос текстовой склейки (конкатенации) строк
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

jcxz, а здесь все просто. Это учебный пример для чего и комменты на манипуляции с каждым битом.
Ферштейн?
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="dosikus",url="/forum/viewtopic.php?p=3457444#p3457444"]jcxz, а здесь все просто. Это учебный пример для чего и комменты на манипуляции с каждым битом.[/uquote]
Оне-ж воспримут это буквально и везде такое городить будут. :facepalm:
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

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

dosikus писал(а):Это учебный пример для чего и комменты на манипуляции с каждым битом.
Было бы лучше написать таким образом этот пример.

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

#define  DMA1_Channel_X DMA1_Channel3

DMA1_Channel_X->CCR  |=  DMA_CCR_MSIZE_0 | // Memory size 16 bit
                         DMA_CCR_PSIZE_0 | // Peripheral size 16 bit
                         DMA_CCR_PL_1    | // Channel Priority level High 
                         DMA_CCR_MINC    | // Memory increment mode 
                         DMA_CCR_CIRC    | // Circular mode
                         DMA_CCR_DIR;      // Data transfer direction Memory -> Peripheral
Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

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

Сообщение Oxford »

jcxz писал(а): Никогда не понимал - на кой для каждого битового поля делать отдельное чтение-модификация-запись (LDR/ORR/STR) вместо просто записи всего слова сразу? :dont_know:
Потому что это не влияет на производительность, не об этом вам думать надо. Читаемость кода в варианте Досикуса лучше.
Конфигурация DMA это разовая операция. Переведите свой фокус на другое.
Последний раз редактировалось Oxford Сб сен 15, 2018 17:32:10, всего редактировалось 3 раза.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Ответить

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