STM32 новичку в ARM что к чему
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Там 7 каналов ну числа у них одинаковые это понятно, но по правилам CMSIS правильно написано.
Что надо то сделать не пойму?
Что надо то сделать не пойму?
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Реклама
Re: STM32 новичку в ARM что к чему
Он упирается что конфиг DMA у F1 и F0 разный.
Что мой код не подойдет для F1 и надо калокуб...
Ну и для слепо упоротых совместим картинко вместе :
Регистры конфига DMA у F0 и F1


[uquote="Oxford",url="/forum/viewtopic.php?p=3457365#p3457365"]Там 7 каналов ну числа у них одинаковые это понятно, но по правилам CMSIS правильно написано.[/uquote]
Нет не правильно, регистры идентичные и в F0 это уже исправлено.
Тут или править хэдер либо использовать любой из DMA_CCRx_XXX для любого канала.
Что мой код не подойдет для 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 что к чему
Все там правильно не мути воду. Регистры идентичные, каналы разные вот и сделали описание для всех каналов. Будет работать и так и так, логика не поменяется. В более старых просто так было. От 2011 хедеры допустим там было для каждого свое, в 2014 уже убрали это и сделали одно описание регистра.

А че он там буробил про какую то структуру?
А ну от этого вылечим, не первый и не последний поциент. У него зависимость острая, наркотическая, сидит на калокубе.
Он упирается что конфиг DMA у F1 и F0 разный.
Что мой код не подойдет для F1 и надо калокуб...
А че он там буробил про какую то структуру?
Последний раз редактировалось Oxford Сб сен 15, 2018 13:07:28, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Re: STM32 новичку в ARM что к чему
[uquote="Oxford",url="/forum/viewtopic.php?p=3457377#p3457377"]Регистры идентичные, каналы разные вот и сделали описание для всех каналов.[/uquote]
Объясняю для только что прибывших - ему надо конфигурить любой канал .
Например так .
А если невнимательно читать RM, складывается ложное впечатление, что биты для каждого регистра конфига уникальны .
Объясняю для только что прибывших - ему надо конфигурить любой канал .
Например так .
Код: Выделить всё
#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 что к чему
Ну с битами понятно CCR регистр одинаковый. Дальше что.
Он не знает как это сделать? Решение нашли? Опять пишем SPL, калолибы?
Он хочет передавать в функцию номер канала и параметры?
Он не знает как это сделать? Решение нашли? Опять пишем SPL, калолибы?
Он хочет передавать в функцию номер канала и параметры?
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Реклама
Re: STM32 новичку в ARM что к чему
Oxford, дождемся вопрошающего.
Да и насчет дефайнов - не нравятся, можно и как Oxford говорит передавать номер канала в функцию...
Да и насчет дефайнов - не нравятся, можно и как Oxford говорит передавать номер канала в функцию...
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Я бы не советовал заворачивать это в функции отдельные лишняя херня. Он и так буксует с ними. Когда программу прогаешь настроил каналы где надо и все.
А дефайны ему чем не угодили?
А дефайны ему чем не угодили?
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Я про HAL и не говорю. А вот LL вполне достоин того, чтобы на него взглянуть. Там всё сводится, по большому счёту, к дефайнам и встраиваемым функциям.a5021 писал(а):И получается полная хрень -- для того, чтобы полноценно использовать HAL, по хорошему, надо и сам HAL знать хорошо и знание железа никак не обойти
Re: STM32 новичку в ARM что к чему
WiseLord, не проще ли начать читать RM?
Re: STM32 новичку в ARM что к чему
Я не хочу писать DMA1_Channel7->CCR |= DMA_CCR7_MINC. Это я уже написал. Хочу написать интегрированно в сгенерённый кубом код. И чтобы он не поломался если я его тем же кубом перегенерю. Вдруг придумаю какую галочку поставить или снять. Потому как не хочется плодить разные сущности - часть HAL, часть CMSIS. Приведённый код - работает и уже полностью отлажен. Но хочется его интегрировать в другой проект, который сгенерён кубом. И вот те части, что управляются кубом - в частности TIM4, DMA, GPIO и может, что еще... вот RTC подключить не удалось - кейл не может скомпилировать - ругается на какую-то функцию (там внутри мелькает _LL_, хотя в опциях я поставил HAL и не нашел как сделать, чтобы никакого вывода на PC13 не шло.) - это я оставил свой CMSIS инициализацию и обработчик прерываний.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: STM32 новичку в ARM что к чему
Мда, слов нет ...
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
[uquote="dosikus",url="/forum/viewtopic.php?p=3457401#p3457401"]WiseLord, не проще ли начать читать RM?[/uquote]А одно другому не мешает.
Re: STM32 новичку в ARM что к чему
Код при этом обычно ломается если вносить изменения в неразрешенных местах.uldemir писал(а):И чтобы он не поломался если я его тем же кубом перегенерю. Вдруг придумаю какую галочку поставить или снять.
Re: STM32 новичку в ARM что к чему
[uquote="uldemir",url="/forum/viewtopic.php?p=3457409#p3457409"]Хочу написать интегрированно в сгенерённый кубом код.[/uquote]
Если писать между отметками
то написать туда можно хоть роман в стихах, главное, чтобы он синтаксически-безупречно был оформлен. Куб ничего не тронет. Или тут не об этом?
Если писать между отметками
Код: Выделить всё
/* USER CODE BEGIN nn */
и
/* USER CODE END nn */Re: STM32 новичку в ARM что к чему
Это я знаю. И так и делаю. Простой вопрос - как установить, используя HAL, source, destination и count для DMA. Хотя бы destination aka CPAR соответствующего канала, так как есть надежда что HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef * htim, uint32_t * pData, uint16_t Length) выполнит два из трёх желаний.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: STM32 новичку в ARM что к чему
[uquote="dosikus",url="/forum/viewtopic.php?p=3457382#p3457382"]Например так .
[/uquote]
Никогда не понимал - на кой для каждого битового поля делать отдельное чтение-модификация-запись (LDR/ORR/STR) вместо просто записи всего слова сразу?
Без всяких калокубов и прочей хрени (STM32F429):
Как видно - даже EN вполне нормально ставится и запускается канал одновременно с программированием управляющих бит.
PS: concat(...) - макрос текстовой склейки (конкатенации) строк
Код: Выделить всё
#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Никогда не понимал - на кой для каждого битового поля делать отдельное чтение-модификация-запись (LDR/ORR/STR) вместо просто записи всего слова сразу?
Без всяких калокубов и прочей хрени (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;PS: concat(...) - макрос текстовой склейки (конкатенации) строк
Re: STM32 новичку в ARM что к чему
jcxz, а здесь все просто. Это учебный пример для чего и комменты на манипуляции с каждым битом.
Ферштейн?
Ферштейн?
Re: STM32 новичку в ARM что к чему
[uquote="dosikus",url="/forum/viewtopic.php?p=3457444#p3457444"]jcxz, а здесь все просто. Это учебный пример для чего и комменты на манипуляции с каждым битом.[/uquote]
Оне-ж воспримут это буквально и везде такое городить будут.
Оне-ж воспримут это буквально и везде такое городить будут.
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 что к чему
Потому что это не влияет на производительность, не об этом вам думать надо. Читаемость кода в варианте Досикуса лучше.jcxz писал(а): Никогда не понимал - на кой для каждого битового поля делать отдельное чтение-модификация-запись (LDR/ORR/STR) вместо просто записи всего слова сразу?![]()
Конфигурация DMA это разовая операция. Переведите свой фокус на другое.
Последний раз редактировалось Oxford Сб сен 15, 2018 17:32:10, всего редактировалось 3 раза.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford


