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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Угу , плюс ждем FIFO . Это нужно для последующего отключения SPI .

Там же в том примере - отключаем канал DMA ( для последующей конфигурации)
Ждем освобождение FIFO, ждем BSY.
Отключаем SPI.

Далее (у меня в прерывании от таймера) :
Конфигурим канал DMA, включаем канал, включаем SPI.

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

void TIM3_IRQHandler(void)
{
	static volatile uint32_t ulTim3Cnt;
  static volatile uint32_t ulPtntCnt;
	
    if (TIM3->SR & TIM_SR_UIF)
    {
        TIM3->SR &= ~TIM_SR_UIF;
	
... CUT....

        DMA1_Channel5->CNDTR=0x09;
        DMA1_Channel5->CCR |=DMA_CCR_EN;	
        SPI2->CR1 |= SPI_CR1_SPE;       
      }      
    }
}

Но это частный случай - регулярная посылка буфера .

Например с SD картой - тупо настраиваем каналы DMA на прием и передачу , включаем и ждем TCIF приемника...

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


#define SPIMMC_DMA_CHANNEL_RX		DMA1_Channel2
#define SPIMMC_DMA_CHANNEL_TX		DMA1_Channel3

....CUT....

/* SPI_DMA_TX configuration SPI_MMC RX ---------------------------------------------*/

		SPIMMC_DMA_CHANNEL_RX->CMAR =(uint32_t)(&rw_dummybyte);
		SPIMMC_DMA_CHANNEL_RX->CPAR =(uint32_t)(&(SPIMMC->DR));
		SPIMMC_DMA_CHANNEL_RX->CNDTR  =btr;
		SPIMMC_DMA_CHANNEL_RX->CCR=0;
		SPIMMC_DMA_CHANNEL_RX->CCR  |= 
		                      DMA_CCR_PL
													//DMA_CCR_MSIZE_0|
													//DMA_CCR_PSIZE_0 |
													//DMA_CCR_MINC
													//DMA_CCR_CIRC|
													//DMA_CCR_DIR
		                                 ;
		

		/* SPI_DMA_TX configuration SPI_MMC TX ---------------------------------------------*/

		
		SPIMMC_DMA_CHANNEL_TX->CMAR =(uint32_t)buff;
		SPIMMC_DMA_CHANNEL_TX->CPAR =(uint32_t)(&(SPIMMC->DR));
		SPIMMC_DMA_CHANNEL_TX->CNDTR  =btr;
		SPIMMC_DMA_CHANNEL_TX->CCR=0;
		SPIMMC_DMA_CHANNEL_TX->CCR  |= 
		                      DMA_CCR_PL|
													//DMA_CCR_MSIZE_0|
													//DMA_CCR_PSIZE_0 |
													DMA_CCR_MINC |
													//DMA_CCR_CIRC|
													DMA_CCR_DIR
		                                 ;
		
		
	}

	/* Enable SPI_MMC TX/RX request */
    SPIMMC->CR2 |= (SPI_CR2_RXDMAEN |SPI_CR2_TXDMAEN);
	
	

	/* Enable SPI_DMA_RX & TX */   
	
	DMA1_Channel3->CCR  |= DMA_CCR_EN; 
	DMA1_Channel2->CCR  |= DMA_CCR_EN; 
	

      /* Wait until SPI_DMA_RX Complete */
	while(!(DMA1->ISR & DMA_ISR_TCIF2)){};
	
	
	

 	/* Disable SPI_DMA_TX/RX */
	 DMA1_Channel3->CCR  &= ~DMA_CCR_EN; 
	  DMA1_Channel2->CCR  &= ~DMA_CCR_EN; 
  
		
		 SPIMMC->CR2 &= ~(SPI_CR2_RXDMAEN |SPI_CR2_TXDMAEN);

	/* Clear DMA_FSMC Transfer/ReceiveComplete Flag */
 
  DMA1->IFCR |= DMA_IFCR_CTCIF2 |DMA_IFCR_CTCIF3;
Последний раз редактировалось dosikus Пн окт 05, 2015 14:25:20, всего редактировалось 1 раз.
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

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

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

Сообщение dosikus »

Andrew Martin, вообщем если нужны одиночные транзакции с дерганьем CS после каждого фрэйма , аналог софтового ногодрочерства :

Как и писал выше
Данные в буфер
Ждем флаг RXNE
Вычитываем буфер

Но даже с LCD сейчас юзаю выхлоп буфера полностью , без дерганья CS .

И чуть не забыл...

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

При освоении STM32F0XX новички часто испытывают трудности запуска SPI в режиме 8бит и ниже. Причиной этому является значительное расширение возможностей модуля SPI, по сравнению с предшественниками, и некоторые изменения в работе модуля.

Что делать:

 1. По умолчанию доступ к SPIx->DR 16бит. Чтобы получить доступ к SPIx->DR как к регистру 8бит пишем:

[CODE]
#define SPI1_DR_8bit          (*(__IO uint8_t *)((uint32_t)&(SPI1->DR))) 
#define SPI2_DR_8bit          (*(__IO uint8_t *)((uint32_t)&(SPI2->DR))) 
Теперь обращаемся к регистру данных так:

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

SPI1_DR_8bit = 0x34;
SPI2_DR_8bit = 0x78;
2. По умолчанию и при запрещённых установках DS [3:0]: Data size регистра SPIx_CR2 устанавливается длина данных 16бит (1111: 16-bit). Поэтому при настройке длины данных логичнее сбрасывать, а не устанавливать определённые биты. Иначе при любой попытке записи некорректного значения, регистр SPIx_CR2 автоматически восстановит длину данных 16бит.
Т.е. для того чтобы установить длину 8бит нужно просто сбросить старший бит DS [3:0] регистра SPIx_CR2.

3. Также встречались жалобы на непонятное поведение бита RXNE. Всё дело в бите FRXTH регистра SPIx_CR2, при работе с данными 8бит требуется его установить .[/code]


Да и убедительная просьба - не обращать внимание на клоуна-теоретика a5021 , создать он может только бесполезный треп ...
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Сообщение Andrew Martin »

CS я тоже не дёргаю, дёргать приходится линию Data/Command LCD, без этого никак.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Andrew Martin писал(а):CS я тоже не дёргаю, дёргать приходится линию Data/Command LCD, без этого никак.
9 бит SPI. Этож F0 .

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

	SPI1->CR1 |= 
	   SPI_CR1_BR_0 |     // 
           SPI_CR1_MSTR |
           SPI_CR1_SSI 	|				 
					 SPI_CR1_SSM              
					          ;	
	SPI1->CR2  = 0x800;   //  9 bit
  
	SPI1->CR1 |= SPI_CR1_SPE;	
Реклама
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Подскажите пожалуйста замученному человеку :) .
Если взять подстроечный резистор и сделать из него делитель напряжения, а затем выход кинуть на вход АЦП в режиме 12бит, то какая точность (линейная в данный момент не интересует) входного напряжения должна получиться?
Я делаю так на своем камне (STM32F030K6T6), а он мне в регистрах показывает плавающее значение в 1-2LSB, при этом часто проваливаясь примерно на +-300LSB (ровно на это значение +-5LSB).
Второй день никак не пойму, и камня другого нет как назло, чтоб заменить и проверить сам АЦП :dont_know: .
P.S. Результаты смотрю при отладке в КЕЙЛе.
Реклама
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Сообщение Andrew Martin »

dosikus писал(а):
Andrew Martin писал(а):CS я тоже не дёргаю, дёргать приходится линию Data/Command LCD, без этого никак.
9 бит SPI. Этож F0 .

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

	SPI1->CR1 |= 
	   SPI_CR1_BR_0 |     // 
           SPI_CR1_MSTR |
           SPI_CR1_SSI 	|				 
					 SPI_CR1_SSM              
					          ;	
	SPI1->CR2  = 0x800;   //  9 bit
  
	SPI1->CR1 |= SPI_CR1_SPE;	

Не понял юмора :dont_know: В дисплее отдельный вывод D/C, а не 9-й бит. Протокол жестко восьмибитный.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »


Andrew Martin
, дисплей ?
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

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

Сообщение Satyr »

isx писал(а): Я делаю так на своем камне (STM32F030K6T6), а он мне в регистрах показывает плавающее значение в 1-2LSB, при этом часто проваливаясь примерно на +-300LSB (ровно на это значение +-5LSB).
Точно ли ты дожидаешься завершения цикла преобразования ?
Ну и посмотри осцилографом что у тебя на Vref творится
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25253
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

isx писал(а):Подскажите пожалуйста замученному человеку :) .
Если взять подстроечный резистор и сделать из него делитель напряжения, а затем выход кинуть на вход АЦП в режиме 12бит, то какая точность (линейная в данный момент не интересует) входного напряжения должна получиться?
Я делаю так на своем камне (STM32F030K6T6), а он мне в регистрах показывает плавающее значение в 1-2LSB, при этом часто проваливаясь примерно на +-300LSB (ровно на это значение +-5LSB).
Второй день никак не пойму, и камня другого нет как назло, чтоб заменить и проверить сам АЦП :dont_know: .
P.S. Результаты смотрю при отладке в КЕЙЛе.
1. Повесьте емкость на входной пин АЦП.
2. Прицепите АЦП к ДМА и с некоторым интервалом семплирования загоняйте результат в кольцевой буфер в ОЗУ (режим циркуляр у ДМА). Будет ясен период провалов.
Возможно какой то другой процесс пытается переключать тот же пин.
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Сообщение Andrew Martin »

dosikus писал(а):
Andrew Martin
, дисплей ?
От нокии 3410, контроллер ОМ6206U. Даташит изучил вдоль и поперёк, здесь вопросов нет никаких.

Да я писал выше, что на софтовом ногодрыге всё идёт как по маслу. И инициализация, и вывод данных.

Мне бы сейчас SPI освоить. Честно говоря, после таймеров и АЦП вот эти ваши манипуляции с SPI выглядят каким-то шаманством :)
А потом будет видеобуфер, из которого DMA по команде будет шлёпать байты через SPI на дисплей. И набор функций, которые будут "рисовать" в видеобуфере.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Andrew Martin писал(а):Честно говоря, после таймеров и АЦП вот эти ваши манипуляции с SPI выглядят каким-то шаманством :)
Это не шаманство, это бред сивой кобылы. Я про "вычитку" буфера приема по рецепту чокнутого профессора.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Satyr писал(а):Точно ли ты дожидаешься завершения цикла преобразования ?
Стоит проверка флага EOC перед каждым чтением.
Satyr писал(а):Ну и посмотри осцилографом что у тебя на Vref творится
Я пробовал от двух батареек запитывать и середину кидал на вход - такая же фигня :dont_know:
КРАМ писал(а):1. Повесьте емкость на входной пин АЦП
RC делал - шумы гасятся процентов на 90, но на провалы это никак не влияет.
КРАМ писал(а):Возможно какой то другой процесс пытается переключать тот же пин.
Программка там ерундовая, только таймер да ацп работают. Щас еще код пойду поковыряю, на всякий случай...
КРАМ писал(а): Прицепите АЦП к ДМА и с некоторым интервалом семплирования загоняйте результат в кольцевой буфер в ОЗУ (режим циркуляр у ДМА). Будет ясен период провалов.
Попробую.

Щас припёр STM32F3Discovery с чипом F303VCT6. Пытаюсь АЦП запустить, но в DR нули (хотя другие регистры устанавливаются). Подозреваю, что что-то путаю в настройке (на F030 все гораздо проще с АЦП было).
Прерывания по таймеру работают.

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

#include "stm32f30x.h"

#define CENTRADC 2048 
uint16_t butt = 0; 
uint16_t butt2 = 0; 
uint16_t buttold = 0; 
int8_t countADC = 0;
int16_t trshADC = 0;



void TIM7_IRQHandler(void) //??????? ??????????? ?????????? ?? ??????? 6
  {
	TIM7->SR &= ~TIM_SR_UIF;	

			
	
  }


int main()
{
	
RCC->CR |= RCC_CR_HSION; //Включить генератор HSI
while((RCC->CR & RCC_CR_HSIRDY)==0) {} //Ожидание готовности HSI

 RCC->CFGR &= ~RCC_CFGR_PLLSRC; //Источником сигнала для PLL выбран HSI с делением на 2
RCC->CR &= ~RCC_CR_PLLON; //Отключить генератор PLL
RCC->CFGR &= ~RCC_CFGR_PLLMULL; //Очистить PLLMULL
RCC->CFGR |= (RCC_CFGR_PLLMULL_3 | RCC_CFGR_PLLMULL_1); //Коефициент умножения
RCC->CR |= RCC_CR_PLLON; //Включить генератор PLL
while((RCC->CR & RCC_CR_PLLRDY)==0) {} //Ожидание готовности PLL 
//Переключиться на тактирование от PLL
RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
RCC->CFGR |= RCC_CFGR_SW_PLL; //Выбрать источником тактового сигнала PLL
while((RCC->CFGR&RCC_CFGR_SWS)!=0x08){} //Ожидание переключения на PLL

	NVIC_EnableIRQ(TIM7_IRQn);
	 NVIC_SetPriority(TIM7_IRQn, 1);

	RCC->AHBENR |= (RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOAEN);
	RCC->AHBENR |= RCC_AHBENR_ADC12EN;
	RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
	RCC->APB1ENR |= RCC_APB1ENR_TIM7EN;
	
	GPIOA->MODER |= GPIO_MODER_MODER14_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER1;// | GPIO_MODER_MODER1 | GPIO_MODER_MODER2;
	
		
	TIM7->PSC = 48 - 1;
	TIM7->ARR = 10;
	TIM7->DIER |= TIM_DIER_UIE;
	
 	//TIM16->EGR |= TIM_EGR_UG;
	
	
	TIM3->CR1 |= TIM_CR1_ARPE;
	TIM3->CCMR1 |= TIM_CCMR1_OC1PE | TIM_CCMR1_OC2PE;
	TIM3->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1;
	TIM3->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E;
	TIM3->ARR = 1024-1;
  TIM3->CCR1 = 0;
	TIM3->CCR2 = 0;
  TIM3->CR1 |= TIM_CR1_CEN;
	
	
  ADC1->CR |= ADC_CR_ADCAL; //Запуск калибровки АЦП
while ((ADC1->CR & ADC_CR_ADCAL) == 1)
{
}
		;
	
	ADC1->CFGR |= ADC_CFGR_CONT; 
	ADC1->SQR1 |= ADC_SQR1_SQ1_2;
  ADC1_2->CCR |= ADC12_CCR_CKMODE_1;
	ADC1->CR |= ADC_CR_ADEN;
	ADC1->CR |= ADC_CR_ADSTART;
//	while ((ADC1->ISR & ADC_ISR_EOC) == 0)
   
	//{
	//}		//ждем пока первое преобразование завершится
//;
	
	
	//TIM7->CR1 |= TIM_CR1_CEN;
    while(1)
			{;					
			}
}
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25253
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

  NVIC_EnableIRQ(TIM7_IRQn);
  NVIC_SetPriority(TIM7_IRQn, 1);
............
  TIM7->DIER |= TIM_DIER_UIE;

А обработчик IRQ по TIM7 где?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Andrew Martin , есть логический анализатор?
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

КРАМ писал(а):А обработчик IRQ по TIM7 где?

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

void TIM7_IRQHandler(void) //??????? ??????????? ?????????? ?? ??????? 6
  {
   TIM7->SR &= ~TIM_SR_UIF;   
  
  }
После объявления переменных. Прерывание работает...

P.S. Ковырял вчера плату с F030 (напомню, проект у меня усилитель D класса). Отсоединил кондер от ноги АЦП и поперли шумы в наушники. И вдруг.... раздался невнятный голос (весь плейлист в мобильнике я знаю, и такого там нет). На всякий случай музыку отключил и стал слушать. Через пару минут опять кто-то невнятно заговорил. По характеру разговора, ловил я скорее всего дорожные рации, но трасса у нас километрах в 10 от моего дома :shock: . Стал ходить по комнатам, но на сигнал это никак не повлияло. Чудеса блин :)))
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Andrew Martin вот выхлоп с именно одиночными транзакциями SPI , с маханием вручную CS и RS( data/command)
Дисплей ST7735R, STM32F030F4 .

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

#define SPI1_DR_8bit          (*(__IO uint8_t *)((uint32_t)&(SPI1->DR))) 

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


		RCC->APB2ENR |=RCC_APB2ENR_SPI1EN;
		

	                  
		SPI1->CR1 |= 
						 SPI_CR1_BR_0 |     // 
						 SPI_CR1_BR_1 | 
						 //SPI_CR1_BR_2 | 
						 SPI_CR1_MSTR |
						 SPI_CR1_SSI 	|				 
						 SPI_CR1_SSM 
						 ;	
	SPI1->CR2  = 0x700;   //  8 bit
	SPI1->CR2 |= SPI_CR2_FRXTH;
	SPI1->CR1 |= SPI_CR1_SPE;	





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

    uint8_t Spi_send (uint8_t data)
      { 
       
        SPI1_DR_8bit = data;                       
        while (!(SPI1->SR & SPI_SR_RXNE));     
        
        return (SPI1_DR_8bit );		        
      }
Это аналог софтового ногодрочерства и привожу лишь в качестве примера.
Клоуну снова предлагаю заткнуться ...

Изображение

Изображение
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Сообщение Andrew Martin »

dosikus писал(а):Andrew Martin вот выхлоп с именно одиночными транзакциями SPI , с маханием вручную CS и RS( data/command)
Дисплей ST7735R, STM32F030F4 .

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

#define SPI1_DR_8bit          (*(__IO uint8_t *)((uint32_t)&(SPI1->DR))) 

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


		RCC->APB2ENR |=RCC_APB2ENR_SPI1EN;
		

	                  
		SPI1->CR1 |= 
						 SPI_CR1_BR_0 |     // 
						 SPI_CR1_BR_1 | 
						 //SPI_CR1_BR_2 | 
						 SPI_CR1_MSTR |
						 SPI_CR1_SSI 	|				 
						 SPI_CR1_SSM 
						 ;	
	SPI1->CR2  = 0x700;   //  8 bit
	SPI1->CR2 |= SPI_CR2_FRXTH;
	SPI1->CR1 |= SPI_CR1_SPE;	





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

    uint8_t Spi_send (uint8_t data)
      { 
       
        SPI1_DR_8bit = data;                       
        while (!(SPI1->SR & SPI_SR_RXNE));     
        
        return (SPI1_DR_8bit );		        
      }
Это аналог софтового ногодрочерства и привожу лишь в качестве примера.

Изображение
На картинке всё выглядит правильно.

Анализатора нет, есть 74НС595 со светодиодами по выходу. Там интерфейс такой же как и у контроллера LCD. На крайний случай посмотрю ей байты - ведь что-то выплёвывается всё-таки при отправке.

Пока не пробовал ваш вариант (с вычиткой приёмного буфера). Когда попробую - отпишусь.

Я вот ещё что подумал: нужно инициализировать сначала порт и выставить нули на ногах SPI, потом задержка (пока отработает RC-цепочка на сбросе контроллера), потом инициализация SPI. Линия CS всегда сидит на земле, pull-down по остальным линиям нет, поэтому SPI может ловить всякий мусор (пока пины работают входами) и первый байт инициализации может быть битым.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

А может есть у кого рабочий код с АЦП на STM32F3 (можно и F4) под CMSIS, желательно без DMA (пока разобраться чтоб не мешала)? На SPL примеров навалом, но там черт ногу ломит, какая функция как на какие регистры воздействует :facepalm: . Буду благодарен :) .

PS просьба снимается. Нашел ошибку: я в настройках GPIO выбрал 2-ой канал, а в регистре ADC1->SQR1 указал первый. Нужно прописать

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

ADC1->SQR1 |= ADC_SQR1_SQ1_1;
PPS. Вот еще хрень всплыла. После установки бита ADEN обязательно нужно дождаться флага включения АЦП:

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

while ((ADC1->ISR & ADC_ISR_ADRD) == 0) {};
иначе прога начинает виснуть при проверке флага EOC, а если проверку не делать, то работает, но сильно врет в показаниях.

PPPS. Нифига EOC не устанавливается, а устанавливается только EOSMP. Его и ставлю на проверку. И для чего тогда EOC и EOSEQ? :dont_know:
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Настроил STMF3Discovery. Сделал замеры - так-же плавает в +-300lsb. Забыл только сказать, что данные я смотрел не в самом регистре, а в переменной butt, в которую я их записывал с регистра (результат должен быть тот же по сути). Решил провести эксперимент.
Кинул вход на среднюю точку - показания около 2048lsb (когда происходит скачок/провал показания пляшут около 1700 и 2300 соответственно). Добавил в коде, сразу после строчки чтения регистра код:

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

if ((butt > 2100) || (butt < 1700))
 {countERROR++;}
и запустил отладку.
Переменная butt по-прожнему сказала то на 1700, то на 2300, но вот прерывание от маркера на строке {countERROR++;} не происходило, да и переменная countERROR оставалась равной нулю.
Из всего этого был сделан вывод: Кейл прилично подпё*дывает :kill: (потратить три дня, чтоб сделать этот вывод..... жесть в общем :facepalm: )
Пойду искать ИСТИННЫЙ источник шума в наушниках...
Ответить

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