09.08.2011, 14:53
|
|
Частый гость
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Сообщение от tanq
|
Я не понял этот код. Во-первых, не прописано общее число каналов в цепочке. Во-вторых, начало последоватеьности каналов лежит в регистре SQR1, а в SQR3 лежит окончание.
Флаг CONT отвечает за то, что АЦП после наступления события будет молотить без остановки.
|
Вот как сейчас выглядит инициализация
Цитата:
|
void ADC_init(void) // Инициализация ацп
{
RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN; // подаем такты на АЦП
ADC1-›CR2 |= ADC_CR2_ADON; // подаем питание на АЦП
ADC1-›SQR1|= ADC_SQR1_L_0; // Выставили колличество преобразований равным 2
ADC1-›CR1 |= ADC_CR1_SCAN; // Режим сканирования
ADC1-›CR2 &= ~ADC_CR2_EXTSEL; // Обнулили ( Timer CC1 event)
ADC1-›CR2 |= ADC_CR2_EXTSEL_2; // Запуск по TRGO Timer 3
ADC1-›CR2 |= ADC_CR2_EXTTRIG; // включаем запуск от внешнего события
ADC1-›SQR3 |= ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_3;//На 14 канал 1-е преобр
ADC1-›SQR3 |=ADC_SQR3_SQ2_0| ADC_SQR3_SQ2_1 | ADC_SQR3_SQ2_2|ADC_SQR3_SQ2_3; //На 15 канал 2-е преобр
ADC1-›CR1 |= ADC_CR1_EOCIE; // вкл. прерывания
NVIC_SetPriority(ADC1_IRQn, 10);
}
|
При такой инициализации он похоже выкидывает прерывание после окончания преобразования по второму каналу , то есть когда в DA лежит значение из второго канала. Ну или я не знаю почему в этом случае он кажет именно второй канал.
Почему начало последовательности лежит в SQR1?
Вот выдержки из референса:
Последний раз редактировалось ^smbd^; 09.08.2011 в 14:57.
|
|
|
|
09.08.2011, 14:56
|
|
Частый гость
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Сообщение от rtyugh
|
да, виснет STM32_Init.c на
if (__RCC_CR_VAL & RCC_CR_HSEON) { // if HSE enabled
while ((RCC-›CR & RCC_CR_HSERDY) == 0); // Wait for HSERDY = 1 (HSE is ready)
|
Виснет в отладчике?
В отладчике он у меня тоже иногда на этом месте подвисал , если в пошаговом режиме отлаживать.
|
|
|
|
09.08.2011, 15:15
|
|
Частый гость
Регистрация: 16.01.2010
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ^smbd^
|
Виснет в отладчике?
В отладчике он у меня тоже иногда на этом месте подвисал , если в пошаговом режиме отлаживать.
|
да и на дискавери нет никаких признаков (
сделал вот так, все работает:
#include "STM32_Init.h"
#include ‹stm32f10x.h›
int a=0;
void TIM1_UP_IRQHandler (void)
{
if ((TIM1-›SR & 0x0001) != 0)
{
if (a==0)
{
GPIOC-›BSRR=GPIO_BSRR_BS8;
a=1;
}
else
{
GPIOC-›BSRR=GPIO_BSRR_BR8;
a=0;
}
TIM1-›SR &= ~(1‹‹0);
}
}
int main (void)
{
stm32_Init ();
// у визарде отключил клок
RCC-›APB2ENR |= RCC_APB2ENR_TIM1EN;
RCC-›APB2ENR |= RCC_APB2ENR_IOPCEN;
while (1)
{
}
}
как настроить таймер на прерывание по переполнению без визарда
|
|
|
|
09.08.2011, 15:36
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 570
Сказал спасибо: 30
Сказали Спасибо 136 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ^smbd^
|
При такой инициализации он похоже выкидывает прерывание после окончания преобразования по второму каналу
|
Я ошибся немного, эти регистры SQR в обратном порядке пронумерованы. Откуда берется второй канал? Возможно где-то не так биты проставлены. Вот рабочий пример:
ADC1-›CR2 = ADC_CR2_ADON | ADC_CR2_CONT | ADC_CR2_DMA | ADC_CR2_TSVREFE; //power on, continuous mode with DMA, Vref enable
for (i=0; i‹20; i++) __NOP(); //wait 1 us
ADC1-›CR2 |= ADC_CR2_CAL; //start calibration
while(ADC1-›CR2 & ADC_CR2_CAL); //wait
ADC1-›CR1 = ADC_CR1_SCAN; //continuous mode
ADC1-›SQR1 = 1‹‹20; //2 conversions
ADC1-›SQR2 = 0;
ADC1-›SQR3 = 3‹‹0 | 4‹‹5;
ADC1-›CR2 |= ADC_CR2_ADON; //start ADC
|
|
|
|
09.08.2011, 17:48
|
|
Временная регистрация
Регистрация: 15.02.2008
Адрес: Болгария
Сообщений: 59
Сказал спасибо: 37
Сказали Спасибо 28 раз(а) в 11 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от rtyugh
|
как настроить таймер на прерывание по переполнению без визарда
|
Тут выкладывал проект мигалки работающий по прерывания Таймер2, на основе стандартной библиотеки SWLIB, надеюсь поможет.
|
|
|
|
09.08.2011, 17:49
|
|
Частый гость
Регистрация: 25.03.2010
Адрес: Voronezh
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от rtyugh
|
как настроить таймер на прерывание по переполнению без визарда
|
Где то так
NVIC-›ISER[(TIM3_IRQn ›› 0x05)] =›(u32)0x01 ‹‹ (TIM3_IRQn & (u  0x1F);
TIM3-›DIER |= TIM_DIER_UIE;
TIM3-›ARR = 10000;
TIM3-›CR1 |= TIM_CR1_CEN;
Плюс про тактирование таймера вспомнить.
|
|
|
|
09.08.2011, 18:53
|
|
Частый гость
Регистрация: 16.01.2010
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от -jonns-
|
Тут выкладывал проект мигалки работающий по прерывания Таймер2, на основе стандартной библиотеки SWLIB, надеюсь поможет.
|
Большое спасибо ) Хороший пример, все четко да еще с комментариями ) Нет еще похожого типа примеров, хотелось разозбраться с АЦП и ШИМ
Последний раз редактировалось rtyugh; 09.08.2011 в 19:38.
|
|
|
|
09.08.2011, 22:27
|
|
Временная регистрация
Регистрация: 15.02.2008
Адрес: Болгария
Сообщений: 59
Сказал спасибо: 37
Сказали Спасибо 28 раз(а) в 11 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от rtyugh
|
хотелось разозбраться с АЦП и ШИМ
|
По встроенного АЦП помоч не могу, пока не осваивал. Пытаюсь подключить внешнее АЦП ADS8361 к STM32-Discovery. Етого АЦП напрямую к SPI МК нельзя подключить, приходится ставить SPI ведомим и генерить ШИМ-ом нужная последовательность для АЦП. Могу выложить код, (пока не закончений).
|
|
|
|
10.08.2011, 10:26
|
|
Частый гость
Регистрация: 25.03.2010
Адрес: Voronezh
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от rtyugh
|
Нет еще похожого типа примеров, хотелось разозбраться с АЦП и ШИМ
|
Я выложил проект на радиокоте. Там можно посмотреть
АЦП (регулярные и инжектиравнные каналы, watch dog) и DMA для усреднения результатов, энкодер, простейшая работа с DAC, программирование flash, интерфейс nokia 3310, прерывания от таймеров, real time clock (коррекция хода там не правильна но направление там взято верное), backup domain, программный reset, проект для gcc или uvision. ШИМ там не применяется - есть готовый DAC. Но TIM1 почти настроен на использование ШИМ - просто этот ШИМ используется для запуска ADC. Для честного шим, выход нужно было вывести наружу.
Не уверен что это хороший пример - но работает
http://radiokot.ru/circuit/power/supply/22/01.rar
У ST есть примеры и исходники библиотек для stm32. Когда я заходил в тупик, то смотрел их, выковыривал минимально работающий вариант.
Последний раз редактировалось Oleg Galizin; 10.08.2011 в 10:46.
|
|
|
|
10.08.2011, 16:08
|
|
Частый гость
Регистрация: 05.03.2011
Сообщений: 36
Сказал спасибо: 7
Сказали Спасибо 19 раз(а) в 19 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Хотел бы узнать мнение у более опытных людей, как вы считаете STM32F105 RCT6 тактируется от внешнего кварца на 8 МГц почему я максимум на выходном ШИМе TIM с PLL получаю где-то 30,8 МГц и какую максимум частоту я могу посылать и принимать с тайймера в режиме ШИМ какое ваше мнение?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:16.
|
|