реклама на сайте
подробности

 
 
> STM32: Свое тактирование SPI
xmailer
сообщение Oct 23 2016, 21:01
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 11-09-16
Пользователь №: 93 305



Подскажите пож-та, пытаюсь тактировать SPI по своему алгоритму:
1. настроил на таймере Output Compare на 1 секунду и режимом Toggle on match, на выходе получаю секундный меандр
2. соединил выход таймера с пином тактирования SPI, по идее теперь SPI должен сдвигать свой регистр с частотой в 1 секунду
3. пытаюсь передать 1 бит 01010100 в SPI и жду на выходе мигание светодиодом 3 раза с задержкой 1 секунда
----- проблема -------
1. диод мигает не с секундной задержкой, о несколько дольше.
2. передача повторяется циклично, т.е. передачей одного байта дело не заканчивается, он снова и снова передается, или просто зависает на MISO

Иллюстрация настроек и работы
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
xmailer
сообщение Oct 26 2016, 08:32
Сообщение #2





Группа: Участник
Сообщений: 10
Регистрация: 11-09-16
Пользователь №: 93 305



Парни, вижу что вы на форуме с опытом, просветите по созвучной с SPI темой (чтобы не плодить тем) - DMA в Periph и HAL, а именно не нашел в HAL аналога атрибуту DMA_InitStructure.DMA_Memory0BaseAddr, т.е. собственно DMA_Memory0BaseAddr задает ссылку на memory переменную и после разрешения DMA и SPI осуществляется передача (в примере ниже цикличная) данных из переменной в SPI->DR.
В HAL такой конкретной линковки с переменной нет, я правильно понимаю, что функцию линковки можно считать HAL_SPI_Transmit_DMA(&hspiX, (uint8_t *)&buffer, sizeof(buffer))?
Или дайте наводку на аналог DMA_PeripheralBaseAddr в HAL.
Спасибо.

в Periph:
Код
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
DMA_InitStructure.с = (uint_t)&buffer;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&SPI1->DR;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
...
пуск передачи
DMA_Cmd(DMA2_StreamX,ENABLE);
SPI_Cmd(SPIX, ENABLE);


в HAL:
Код
...
hdma_spiX_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_spiX_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spiX_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spiX_tx.Init.Mode = DMA_CIRCULAR;
...
HAL_DMA_Init(&hdma_spi1_tx);
// линк
__HAL_LINKDMA(hspi,hdmatx,hdma_spiX_tx);
...
пуск передачи
__HAL_DMA_ENABLE(&hdma_spiX_tx);
__HAL_SPI_ENABLE(&hspiX);

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 12:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01598 секунд с 7
ELECTRONIX ©2004-2016