16.01.2017, 11:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
AR_Favorit, он очень даже не того, активно развивается и пулл-риквесты принимает. Просто разрабы API категорически сменили и я решил послать их в одно место.
И если в F1/F4 без сторонних библиотек сложно обойтись, то в F0, думаю, дня за 3-4 я свое окружение наваяю. Так как gcc оптимизирует нормально (в отличие от sdcc), можно оставить ST'шные объявления регистров (через структуры), это еще и плюсом будет с точки зрения использования кода из ST'шных сниппетов.
Правда, не знаю еще, как USB буду прикручивать. Ну да ладно, поживем — увидим.
__________________
Смерть бандеровской мразоте!
|
|
|
|
18.01.2017, 09:07
|
|
Прописка
Регистрация: 14.09.2009
Адрес: Екатеринбург
Сообщений: 116
Сказал спасибо: 14
Сказали Спасибо 31 раз(а) в 15 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Доброго всем дня.
Возник вопрос по работе АЦП с ДМА на STM32L151C6
Вот так инициализирую АЦП.
Код:
|
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOA Periph clock enable */
RCC_AHBPeriphClockCmd ( RCC_AHBPeriph_GPIOA, ENABLE );
/* Configure PA.01 (ADC Channel_1) in analog mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init ( GPIOA, &GPIO_InitStructure );
/* Enable DMA1 clock */
RCC_AHBPeriphClockCmd ( RCC_AHBPeriph_DMA1, ENABLE );
/* DMA1 channel1 configuration */
DMA_DeInit ( DMA1_Channel1 );
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_ADDRESS;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&TrLine.ucADC_Value;
//DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 1;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init ( DMA1_Channel1, &DMA_InitStructure );
/* Enable DMA1 channel1 */
DMA_Cmd ( DMA1_Channel1, ENABLE );
/* Enable ADC1 clock */
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_ADC1, ENABLE );
/* ADC1 configuration */
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init ( ADC1, &ADC_InitStructure );
/* ADC1 regular channel1 configuration */
ADC_RegularChannelConfig ( ADC1, ADC_Channel_1, 1, ADC_SampleTime_4Cycles );
/* Enable the request after last transfer for DMA Circular mode */
ADC_DMARequestAfterLastTransferCmd ( ADC1, ENABLE );
/* Enable ADC1 DMA */
ADC_DMACmd ( ADC1, ENABLE );
/* Enable ADC1 */
ADC_Cmd ( ADC1, ENABLE );
ADC_SoftwareStartConv ( ADC1 ); |
Но в переменой значение обновляется один раз.
Где собака зарыта уже не знаю.
Может кто сталкивался с подобным?
Последний раз редактировалось elesy; 18.01.2017 в 09:15.
|
|
|
|
21.01.2017, 23:34
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Добра всем,
STM32 SPI DMA (STM в роли мастера, работает только на отсылание).
Как правильно поднять ChipSelect (CS) пин по окончании транзакции? Прерывание DMA_IT_TC генерируется раньше чем выйдет последний бит. Сейчас делаю так: выставляю флаг при DMA_IT_TC, и в главном потоке ожидаю конца смотря на RXNE SPI... не красиво...
|
|
|
|
21.01.2017, 23:40
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
elesy,
помнится в STM32F10x в структуре ADC_InitStructure было еще поле: ADC_Mode. У вас не видно, хотя может его нет в STM32L151...
|
|
|
|
22.01.2017, 12:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от nerozero
|
Добра всем,
STM32 SPI DMA (STM в роли мастера, работает только на отсылание).
Как правильно поднять ChipSelect (CS) пин по окончании транзакции? Прерывание DMA_IT_TC генерируется раньше чем выйдет последний бит. Сейчас делаю так: выставляю флаг при DMA_IT_TC, и в главном потоке ожидаю конца смотря на RXNE SPI... не красиво...
|
Как советует мануал, определять конец передачи по исчезновению бита занятости SPI_SR_BSY в регистре SPIx-›SR, после этого можно выключить SPI, если управление NSS (он же CS) аппаратное, или вручную поднять NSS при софтовом его управлении. А начинать следить за битом занятости надо с момента возникновения прерывания по завершению DMA.
Когда суммарный делитель частоты SPI небольшой, не превышает примерно 1:4 от системной частоты, это можно делать прямо в прерывании без особого ущерба. При бОльших делителях можно снизить приоритет прерывания от DMA и тоже не особо то париться, ожидая завершения передачи в прерывании.
|
|
|
|
22.01.2017, 12:49
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от NewWriter
|
Как советует мануал, определять конец передачи по исчезновению бита занятости SPI_SR_BSY в регистре SPIx-›SR, после этого можно выключить SPI, если управление NSS (он же CS) аппаратное, или вручную поднять NSS при софтовом его управлении. А начинать следить за битом занятости надо с момента возникновения прерывания по завершению DMA.
Когда суммарный делитель частоты SPI небольшой, не превышает примерно 1:4 от системной частоты, это можно делать прямо в прерывании без особого ущерба. При бОльших делителях можно снизить приоритет прерывания от DMA и тоже не особо то париться, ожидая завершения передачи в прерывании.
|
Могли бы привести пример аппаратного контроля NSS в режиме мастера? У меня не получилось никак.
|
|
|
|
22.01.2017, 12:55
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Потому что референс не читали ни разу, никак. Вот и есть повод заглянуть туда, а есть ли в вашем СТМ32 аппаратное управление NSS? А то ваше никак может длиться всю жизнь.
|
|
|
|
22.01.2017, 15:22
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
STM32F0, С таким пафосом как вы вообще выходите в общество то?! Если есть что сказать, говорите. А нет, - есть такая опция - не отсылать сообщения.
Простите за оффтоп...
|
|
|
|
22.01.2017, 18:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,672
Сказал спасибо: 130
Сказали Спасибо 1,074 раз(а) в 517 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от NewWriter
|
Как советует мануал, определять конец передачи по исчезновению бита занятости SPI_SR_BSY в регистре SPIx-›SR, после этого можно выключить SPI, если управление NSS (он же CS)
|
Почитайте про SPI в STM32: SPI: Вы всё делаете не так !
|
|
|
|
22.01.2017, 19:21
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Если бы аффтар понимал бы что к чему, он бы эту статью и не писал. Охренеть, за столько лет существования СТМ32 к чуваку внезапно вдруг пришло озарение, референс соизволил прочитать, наконец-то. И что-то мне подсказывает, что оно не последнее. Тем более что аффтару уже вбивали в его дурную голову, что в другом случае всё будет по другому и совсем не так как он это себе представляет на данный момент. И много то не надо, достаточно добавить СД-карту. Но для отстойника типа хабры-швабры темы типа "Прикинь, 2+2=4 !" это нормально.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:02.
|
|