Easyelectronics.ru

Электроника для всех
Текущее время: 25 июн 2019, 13:40

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: STM32F4. В часть регистра АЦП не пишутся данные
СообщениеДобавлено: 24 янв 2018, 20:06 
Только пришел

Зарегистрирован: 24 янв 2018, 19:27
Сообщения: 15
Добрый день, коллеги!

Вот начинаю осваивать STM32F4. Стандартными библиотеками не пользуюсь. Пишу прямо в регистры. При настройке АЦП столкнулся со странной проблемой.
Пишу в регистр ADC_CR2 и биты старше 7 не дает записать. Пробовал с ADC_CR1 тоже не пишет выше 1 бита (ниже пример с ADC_CR2).
Уже всё что только можно было записать пробовал - результата нет.

Вот мой код:

RCC_AHB1ENR |= (4<<0); // enable peripheral clock AHB1 (GPIOAEN)
RCC_APB2ENR |= (7<<8); // enable peripheral clock APB2 (ADC1)

// GPIO portA pin 2 initialization
GPIOA_MODER |= GPIO_MODER2; // set analog mode
GPIOA_OTYPER |= GPIO_OT2; // set output type (push-pull)
GPIOA_OSPEEDR &= ~GPIO_OSPEEDR2; // set output speed (medium)
GPIOA_PUPDR &= ~GPIO_PUPDR2; // set no pull-up/down

ADC_CCR |= (1<<16); // ADC prescaler equal to 4 (15 MHz for APB2 60 MHz)
ADC1_CR1 |= (2<<24); // 12-bit (15 ADCCLK cycles)
ADC1_SMPR2 |= (1<<6); // 15 cycles sampling time
ADC1_SQR1 &= ~(15<<20); // 1 conversion in sequence
ADC1_SQR3 |= (2<<0); // 1st conversion in sequence is ADC1 channel 2
ADC1_CR2 &= ~(1<<1); // single mode conversion
ADC1_CR2 &= ~(2<<28); // external trigger enable for regular channels
ADC1_CR2 &= ~(2<<11); // right alignment
ADC1_CR2 |= (1<<0); // ADC ON

ADC1_CR2 |= (1<<30); // start conversation

И вот как раз стартовать мне не дает. Пишу в регистр, а он не записывает, хотя включил АЦП.

Что делать, даже не знаю =(
Помогите, пожалуйста, разобраться. Что я не настроил?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4. В часть регистра АЦП не пишутся данные
СообщениеДобавлено: 24 янв 2018, 21:04 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 900
ndobro писал(а):
ADC1_CR2 |= (1<<30); // start conversation

И вот как раз стартовать мне не дает. Пишу в регистр, а он не записывает, хотя включил АЦП.

А почему ты решил, что этот бит не записывается, если в описании сказано, что он автоматически сбрасывается как только начнется конвертация?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4. В часть регистра АЦП не пишутся данные
СообщениеДобавлено: 25 янв 2018, 12:16 
Только пришел

Зарегистрирован: 24 янв 2018, 19:27
Сообщения: 15
Reflector писал(а):
ndobro писал(а):
ADC1_CR2 |= (1<<30); // start conversation

И вот как раз стартовать мне не дает. Пишу в регистр, а он не записывает, хотя включил АЦП.

А почему ты решил, что этот бит не записывается, если в описании сказано, что он автоматически сбрасывается как только начнется конвертация?


Всё верно. Но это лишь один из примеров. Он также не дает записать и в 22 бит и в другие (старше 7-го).

Да и как я понимаю, в регистре данных должен лежать какое либо значение и флаг завершения преобразования должен был выставиться, ведь так?

Вообще очень интересно, в дизассемблинге вижу что он пишет 0, хотя я написал другое... =/

ADC1_CR2 |= (1<<30); // start conversation
ldr r3, [pc, #276] ; (0x200006bc <ADCInit+564>)
ldr r2, [pc, #276] ; (0x200006bc <ADCInit+564>)
ldrb r2, [r2, #0]
uxtb r2, r2
strb r2, [r3, #0]

Хотя должен был после после операции LDRB сделать:
orr.w r3, r3, #40000000

Так что здесь что-то другое. Может быть есть какое-то правило по последовательности настройки регистров? Мне кажется что-то мешает мне туда писать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4. В часть регистра АЦП не пишутся данные
СообщениеДобавлено: 25 янв 2018, 13:30 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 900
ndobro писал(а):
Так что здесь что-то другое. Может быть есть какое-то правило по последовательности настройки регистров? Мне кажется что-то мешает мне туда писать...

Вспомнил, после установки CR2_ADON нужно выждать 3us(Tstab), ну и вторая возможная проблема может быть в том, что раз не пишутся биты выше 7-го а регистры ты зачем-то объявлял сам, то может твой ADC1_CR2 объявлен как 8-ми битный...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4. В часть регистра АЦП не пишутся данные
СообщениеДобавлено: 25 янв 2018, 13:40 
Только пришел

Зарегистрирован: 24 янв 2018, 19:27
Сообщения: 15
Reflector писал(а):
ndobro писал(а):
Так что здесь что-то другое. Может быть есть какое-то правило по последовательности настройки регистров? Мне кажется что-то мешает мне туда писать...

Вспомнил, после установки CR2_ADON нужно выждать 3us(Tstab), ну и вторая возможная проблема может быть в том, что раз не пишутся биты выше 7-го а регистры ты зачем-то объявлял сам, то может твой ADC1_CR2 объявлен как 8-ми битный...


Ох дорогой Reflector, я б тебя расцеловал бы! Просто в точку! Регистр был действительно объявлен 8 битным. Спасибо тебе большое! Всё заработало =)
Вот действительно, когда анализировал свой текст, совсем забыл проверить объявленный тип.

А про паузу можешь по подробней? Это ты опытным путем установил 3 мкс? Это, я так понимаю, время, за которое регистр успевает защелкнуться, ведь так? Т.е. для других всех регистров на этой шине тоже 3 мкс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4. В часть регистра АЦП не пишутся данные
СообщениеДобавлено: 25 янв 2018, 13:55 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 900
ndobro писал(а):
А про паузу можешь по подробней? Это ты опытным путем установил 3 мкс? Это, я так понимаю, время, за которое регистр успевает защелкнуться, ведь так? Т.е. для других всех регистров на этой шине тоже 3 мкс?

Нет, Tstab - это Power-up time, длительность ищется в табличке "ADC characteristics" из Datasheet.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4. В часть регистра АЦП не пишутся данные
СообщениеДобавлено: 25 янв 2018, 14:48 
Только пришел

Зарегистрирован: 24 янв 2018, 19:27
Сообщения: 15
Reflector писал(а):
ndobro писал(а):
А про паузу можешь по подробней? Это ты опытным путем установил 3 мкс? Это, я так понимаю, время, за которое регистр успевает защелкнуться, ведь так? Т.е. для других всех регистров на этой шине тоже 3 мкс?

Нет, Tstab - это Power-up time, длительность ищется в табличке "ADC characteristics" из Datasheet.



Теперь увидел. Спасибо =)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB