Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

SOFTPWM stm32f030f4

Непрочитано 20.08.2016, 18:56  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 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_ADC1, ENABLE);
    
    /* 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_Init( ADC1, &ADC_Init_user);
    
    ADC_ChannelConfig(ADC1, ADC_Channel_3,ADC_SampleTime_7_5Cycles);
    //ADC1-›CHSELR = ADC_CHSELR_CHSEL3 | ADC_CHSELR_CHSEL4;
    ADC_ChannelConfig(ADC1, ADC_Channel_4,ADC_SampleTime_7_5Cycles);
    //ADC_ContinuousModeCmd(ADC1, ENABLE);
    
    NVIC_EnableIRQ(ADC1_IRQn);
    
    ADC_ITConfig(ADC1,ADC_IT_EOC, ENABLE);
    ADC_ITConfig(ADC1,ADC_IT_EOSEQ, ENABLE);
    ADC_GetCalibrationFactor(ADC1);
    ADC_Cmd(ADC1, ENABLE);
    /* 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(ADC1, ADC_IT_EOC) == SET )
    {
        ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
        
        data_adc1 = (uint32_t)ADC_GetConversionValue(ADC1);
        data_adc2 = (uint32_t)ADC_GetConversionValue(ADC1);
    }
    


} 
Реклама:
miwutka вне форума  
Непрочитано 20.08.2016, 18:59  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 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.RUN
 
Регистрация: 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.RUN
 
Регистрация: 16.02.2012
Сообщений: 440
Сказал спасибо: 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.RUN
 
Регистрация: 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(ADC1, ADC_IT_EOC) == SET )
    {
        ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
        
        
        if (bit_temp) data_adc1 = (uint32_t)ADC_GetConversionValue(ADC1); else data_adc2 = (uint32_t)ADC_GetConversionValue(ADC1);
        bit_temp^=1;

    }
    
    if (ADC_GetITStatus(ADC1, ADC_IT_EOSEQ) == SET )
    {
        ADC_ClearITPendingBit(ADC1, ADC_IT_EOSEQ);
        
        
    }

} 
в переменных data_adc1 и data_adc2 значения перехлёстываются. Немогу понять второй флаг прерывания.
miwutka вне форума  
Непрочитано 21.08.2016, 00:35  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 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.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

а для чего прерывание overrun? Это если режим continiuos и оно просканировало выбранные каналы, и начинает заново?
miwutka вне форума  
Непрочитано 21.08.2016, 02:53  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 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.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: SOFTPWM stm32f030f4

AR_Favorit, Как же мне тогда правильно считывать значение с двух каналов при последовательном сканировании?...
miwutka вне форума  
Непрочитано 21.08.2016, 10:23  
МВА
Гражданин KAZUS.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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, время: 16:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.