Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 20.08.2016, 18:56  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

Сообщение от zöner Посмотреть сообщение
такой говнокод...
Согласен, но с этим говнокодом мне быстрее входится в стм32. Разберусь чуток с периферией и буду напрямую писать в регистры. Ведь это всё есть в хидерах, откуда можно копипастить строчки регистров и всё.

Вот с стм32 в 103 АЦП освоил и регулярный канал и инжекционный. А вот с 030 немогу почемуто. Нужно сканить 3,4 каналы. Пишу инит. Запускаю отладку. В регистр пишет измеренное значение, но в прерывание IRQHandler не заходит.
Глянте плиз говнокод мой ))) Почему не попадает в прерывание?
PHP код:
void ADC_continious_ini(void)
{

    
GPIO_InitTypeDef Pin;
    
    
ADC_InitTypeDef ADC_Init_user;
    
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
    
    
Pin.GPIO_Pin GPIO_Pin_3|GPIO_Pin_4;
    
Pin.GPIO_Mode GPIO_Mode_AN;
    
Pin.GPIO_Speed GPIO_Speed_2MHz;
    
Pin.GPIO_OType GPIO_OType_PP;
    
Pin.GPIO_PuPd GPIO_PuPd_NOPULL;
    
GPIO_Init(GPIOA, &Pin);
    
    
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1ENABLE);
    
    
/* ADC1 DeInit */  
  
ADC_DeInit(ADC1);
  
  
/* Initialize ADC structure */
  
ADC_StructInit(&ADC_Init_user);
    
    
ADC_Init_user.ADC_Resolution ADC_Resolution_12b;
    
ADC_Init_user.ADC_ContinuousConvMode ENABLE;
    
ADC_Init_user.ADC_ExternalTrigConvEdge ADC_ExternalTrigConvEdge_None;
    
//ADC_Init_user.ADC_ExternalTrigConv = 
    
ADC_Init_user.ADC_DataAlign ADC_DataAlign_Right;
    
ADC_Init_user.ADC_ScanDirection ADC_ScanDirection_Upward;
    
    
ADC_InitADC1, &ADC_Init_user);
    
    
ADC_ChannelConfig(ADC1ADC_Channel_3,ADC_SampleTime_7_5Cycles);
    
//ADC1-›CHSELR = ADC_CHSELR_CHSEL3 | ADC_CHSELR_CHSEL4;
    
ADC_ChannelConfig(ADC1ADC_Channel_4,ADC_SampleTime_7_5Cycles);
    
//ADC_ContinuousModeCmd(ADC1, ENABLE);
    
    
NVIC_EnableIRQ(ADC1_IRQn);
    
    
ADC_ITConfig(ADC1,ADC_IT_EOCENABLE);
    
ADC_ITConfig(ADC1,ADC_IT_EOSEQENABLE);
    
ADC_GetCalibrationFactor(ADC1);
    
ADC_Cmd(ADC1ENABLE);
    
/* Wait the ADRDY flag */
  //while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY)); 
  
  /* ADC1 regular Software Start Conv */ 
  
ADC_StartOfConversion(ADC1);
    
}

oid ADC1_IRQHandler(void)
{
LEDpins[2]++;
    if (
ADC_GetITStatus(ADC1ADC_IT_EOC) == SET )
    {
        
ADC_ClearITPendingBit(ADC1ADC_IT_EOC);
        
        
data_adc1 = (uint32_t)ADC_GetConversionValue(ADC1);
        
data_adc2 = (uint32_t)ADC_GetConversionValue(ADC1);
    }
    



Реклама:
miwutka вне форума  
Непрочитано 20.08.2016, 18:59  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

Сообщение от NewWriter Посмотреть сообщение
Блин, а я и не пробовал раньше разгонять 030-й.
в 96-ом свой 80386 разгонял сопроцессор с 33 МГц до 35 вроде. Даже непомню как это делал )) Но сейчас нет компа в котором я бы не разгонял всё что можно, и видухи. Ток охлаждение соотв. Вот с тех пор наверно всё пробую разгонять ))) Есле б свой мозг разогнать еще чтоб быстрее вкуривать)))
miwutka вне форума  
Непрочитано 20.08.2016, 19:04  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

Сообщение от zöner Посмотреть сообщение
SoftwPWM оформить как inline
Незнаю что это такое inline....
miwutka вне форума  
Непрочитано 20.08.2016, 21:30  
zöner
Гражданин KAZUS.RU
 
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
zöner на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

http://www.greenend.org.uk/rjk/tech/inline.html
http://alenacpp.blogspot.com/2005/01/blog-post_28.html
zöner вне форума  
Непрочитано 20.08.2016, 21:39  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

АЦП запустил. Работает в режиме сканирования. Немогу понять что за два прерывания?
ISR-›EOS ISR-›EOC
EOC - End of conversion - это когда завершено преобразование.
EOS - end of sequence flag - не могу понять когда он включается.
Вот у меня два канала сканируется 3,4. В прерывании сделал так

PHP код:
void ADC1_IRQHandler(void)
{

    if (
ADC_GetITStatus(ADC1ADC_IT_EOC) == SET )
    {
        
ADC_ClearITPendingBit(ADC1ADC_IT_EOC);
        
        
        if (
bit_tempdata_adc1 = (uint32_t)ADC_GetConversionValue(ADC1); else data_adc2 = (uint32_t)ADC_GetConversionValue(ADC1);
        
bit_temp^=1;

    }
    
    if (
ADC_GetITStatus(ADC1ADC_IT_EOSEQ) == SET )
    {
        
ADC_ClearITPendingBit(ADC1ADC_IT_EOSEQ);
        
        
    }


в переменных data_adc1 и data_adc2 значения перехлёстываются. Немогу понять второй флаг прерывания.
miwutka вне форума  
Непрочитано 21.08.2016, 00:35  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

Сообщение от miwutka Посмотреть сообщение
Немогу понять что за два прерывания?
Ну фик с ним, с HAL-ом, но в даташит глянуть не быстрее, чем на форуме спрашивать?))

В вашем случае - EOSEQ не играет никакой роли и можно просто не разрешать прерывание по нему.
Миниатюры:
Нажмите на изображение для увеличения
Название: 11059574.png
Просмотров: 0
Размер:	118.1 Кб
ID:	99673  

Последний раз редактировалось AR_Favorit; 21.08.2016 в 00:41.
AR_Favorit вне форума  
Непрочитано 21.08.2016, 01:47  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

а для чего прерывание overrun? Это если режим continiuos и оно просканировало выбранные каналы, и начинает заново?
miwutka вне форума  
Непрочитано 21.08.2016, 02:53  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

Сообщение от miwutka Посмотреть сообщение
а для чего прерывание overrun? Это если режим continiuos и оно просканировало выбранные каналы, и начинает заново?
Нет. Это если независимо от режима при завершении очередного преобразования ADC обнаружилось, что флаг EOC уже установлен. Если программист не забыл очистить этот флаг - то это означает, что при появлении нового результата в ADC_DR предыдущее значение еще не было считано, то бишь потерялось при его перезаписи.

Именно поэтому, кстати, надо сначала считать значение ADC_DR, а уж потом очищать флаг EOC (у вас сделано наоборот), иначе возможна ситуация, что новое значение ADC_DR устанавливается где-то между очисткой флага и чтением регистра, и реально считывается значение уже следующего канала в последовательности, и даже отслеживание overrun эту ситуацию не исправит.

А завершение последовательности сканирования выбранных каналов - это как раз EOSEQ из предыдущих постов.
AR_Favorit вне форума  
Эти 2 пользователя(ей) сказали Спасибо AR_Favorit за это сообщение:
miwutka (21.08.2016), МВА (21.08.2016)
Непрочитано 21.08.2016, 10:01  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

AR_Favorit, Как же мне тогда правильно считывать значение с двух каналов при последовательном сканировании?...
miwutka вне форума  
Непрочитано 21.08.2016, 10:23  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

Сообщение от zöner Посмотреть сообщение
можно просто единицу писать, без &: TIM17-›SR = ~TIM_SR_UIF
один ldr лишний
TIM17-›SR &= ~TIM_SR_UIF;
Вот здесь я не понял. Я было подумал, что в этом случае мы сбрасываем бит UIF.
TIM17-›SR = ~TIM_SR_UIF;
А в этом случае мы записываем в регистр TIM17_SR число 0xFFFFFFFE. Ну, бит UIF сбросится, а как же остальные биты?
МВА вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot