STM32 новичку в ARM что к чему
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: STM32 новичку в ARM что к чему
Сравнивать значения АЦП?
Там же шум присутствует.
Giggity giggity goo!
- Реклама
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: STM32 новичку в ARM что к чему
Так они же одновременно снимаются, значит и шум одновременно попадает.
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: STM32 новичку в ARM что к чему
Но ведь разные каналы АЦП? Я бы не был так уверен, что шум там идентичен.
Giggity giggity goo!
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: STM32 новичку в ARM что к чему
В STM32F4 три модуля АЦП, которые могут работать независимо или одновременно.
В примере используются 2 модуля.
В примере используются 2 модуля.
Re: STM32 новичку в ARM что к чему
И что? У двух совершенно разных АЦП должны совпасть шумы? С чего это? Шумы АЦП имеются ввиду, а не сигнала.
- Реклама
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: STM32 новичку в ARM что к чему
Ой, а про них я и не подумал, каюсь.
Завтра же проверю, на сколько один от другого отстаёт. Именно разность в Watch поставлю.
Просто сами значения в дебагере отстоят друг от друга на достаточно большие значения. Не знаю, стоит ли ему верить.
Завтра же проверю, на сколько один от другого отстаёт. Именно разность в Watch поставлю.
Просто сами значения в дебагере отстоят друг от друга на достаточно большие значения. Не знаю, стоит ли ему верить.
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: STM32 новичку в ARM что к чему
Где-то здесь уже говорили, что при большой скорости обновления значений в памяти, дебаггер жутко врёт.
Лучше снимите пару периодов в память, затем остановите DMA и смотрите через дебаггер снятые значения.
Лучше снимите пару периодов в память, затем остановите DMA и смотрите через дебаггер снятые значения.
Giggity giggity goo!
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: STM32 новичку в ARM что к чему
Разность показаний колеблется в пределах 0-2. Значит, всё нормально.
А вот сами показания в дебаггере так и различаются на 100-200.
А вот сами показания в дебаггере так и различаются на 100-200.
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: STM32 новичку в ARM что к чему
Подскажите, а как можно замутить MAC (Multiply-Accumulate) на той же F4? В CMSIS есть функции вроде arm_mult_f32, но они пробегают по массивам, а не складывают всё в одну переменную.
Т.е. есть A[i]=B[i]*C[i], а надо A+=B[i]*C[i]. Куда копать?
Спасибо.
Т.е. есть A[i]=B[i]*C[i], а надо A+=B[i]*C[i]. Куда копать?
Спасибо.
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: STM32 новичку в ARM что к чему
UPD: в кортексе M4 как таковом есть инструкции UMLAL, SMLAL, как раз для сложения с накоплением. Как бы заставить кейл их использовать? Или проще писать ассемблерную вставку?
UPD2: вроде разобрался. Нужно просто типы данных подобрать, компилятор додумается использовать одну инструкцию.

UPD2: вроде разобрался. Нужно просто типы данных подобрать, компилятор додумается использовать одну инструкцию.

- КАШАК
- Это не хвост, это антенна
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Приобрел плату STM32 VL. Начал разбираться: помигал светодиодами, поопрашивал кнопки, запустил дисплей от NOKIA3310. В общем наигравшись решил перейти к более углубленному изучению. Первой строчкой попавшей в поле зрения оказалась
После изучения различных примеров и описаний было установлено назначение данной строки, НО в этих самых предметах ни слова не было сказано почему надо тактировать выходы именно от APB2ENR. Дальнейшие поиски тоже ни к чему не привели.
Вот мне и хотелось бы узнать назначение всех регистров RCC, а их там целых 10 штук:
Заранее спасибо
Код: Выделить всё
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;После изучения различных примеров и описаний было установлено назначение данной строки, НО в этих самых предметах ни слова не было сказано почему надо тактировать выходы именно от APB2ENR. Дальнейшие поиски тоже ни к чему не привели.
Код: Выделить всё
__IO uint32_t CR;
__IO uint32_t CFGR;
__IO uint32_t CIR;
__IO uint32_t APB2RSTR;
__IO uint32_t APB1RSTR;
__IO uint32_t AHBENR;
__IO uint32_t APB2ENR;
__IO uint32_t APB1ENR;
__IO uint32_t BDCR;
__IO uint32_t CSR;Заранее спасибо
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Re: STM32 новичку в ARM что к чему
Смотрите Figure 1 и Figure 2 даташита... и содержимое файла stm32f10x.h...
Код: Выделить всё
/****************** Bit definition for RCC_APB2ENR register *****************/
#define RCC_APB2ENR_AFIOEN ((uint32_t)0x00000001) /*!< Alternate Function I/O clock enable */
#define RCC_APB2ENR_IOPAEN ((uint32_t)0x00000004) /*!< I/O port A clock enable */
#define RCC_APB2ENR_IOPBEN ((uint32_t)0x00000008) /*!< I/O port B clock enable */
#define RCC_APB2ENR_IOPCEN ((uint32_t)0x00000010) /*!< I/O port C clock enable */
#define RCC_APB2ENR_IOPDEN ((uint32_t)0x00000020) /*!< I/O port D clock enable */
#define RCC_APB2ENR_ADC1EN ((uint32_t)0x00000200) /*!< ADC 1 interface clock enable */
#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL)
#define RCC_APB2ENR_ADC2EN ((uint32_t)0x00000400) /*!< ADC 2 interface clock enable */
#endif
#define RCC_APB2ENR_TIM1EN ((uint32_t)0x00000800) /*!< TIM1 Timer clock enable */
#define RCC_APB2ENR_SPI1EN ((uint32_t)0x00001000) /*!< SPI 1 clock enable */
#define RCC_APB2ENR_USART1EN ((uint32_t)0x00004000) /*!< USART1 clock enable */
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
#define RCC_APB2ENR_TIM15EN ((uint32_t)0x00010000) /*!< TIM15 Timer clock enable */
#define RCC_APB2ENR_TIM16EN ((uint32_t)0x00020000) /*!< TIM16 Timer clock enable */
#define RCC_APB2ENR_TIM17EN ((uint32_t)0x00040000) /*!< TIM17 Timer clock enable */
#endif
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL)
#define RCC_APB2ENR_IOPEEN ((uint32_t)0x00000040) /*!< I/O port E clock enable */
#endif /* STM32F10X_LD && STM32F10X_LD_VL */
#if defined (STM32F10X_HD) || defined (STM32F10X_XL)
#define RCC_APB2ENR_IOPFEN ((uint32_t)0x00000080) /*!< I/O port F clock enable */
#define RCC_APB2ENR_IOPGEN ((uint32_t)0x00000100) /*!< I/O port G clock enable */
#define RCC_APB2ENR_TIM8EN ((uint32_t)0x00002000) /*!< TIM8 Timer clock enable */
#define RCC_APB2ENR_ADC3EN ((uint32_t)0x00008000) /*!< DMA1 clock enable */
#endif
#if defined (STM32F10X_HD_VL)
#define RCC_APB2ENR_IOPFEN ((uint32_t)0x00000080) /*!< I/O port F clock enable */
#define RCC_APB2ENR_IOPGEN ((uint32_t)0x00000100) /*!< I/O port G clock enable */
#endif
#ifdef STM32F10X_XL
#define RCC_APB2ENR_TIM9EN ((uint32_t)0x00080000) /*!< TIM9 Timer clock enable */
#define RCC_APB2ENR_TIM10EN ((uint32_t)0x00100000) /*!< TIM10 Timer clock enable */
#define RCC_APB2ENR_TIM11EN ((uint32_t)0x00200000) /*!< TIM11 Timer clock enable */
#endif
"Я не даю готовых решений, я заставляю думать!"(С)
- Солнцеворот
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вт июн 03, 2008 01:39:47
Re: STM32 новичку в ARM что к чему
КАШАК писал(а):Приобрел плату STM32 VL. Начал разбираться: помигал светодиодами, поопрашивал кнопки, запустил дисплей от NOKIA3310. В общем наигравшись решил перейти к более углубленному изучению. Первой строчкой попавшей в поле зрения оказаласьКод: Выделить всё
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
После изучения различных примеров и описаний было установлено назначение данной строки, НО в этих самых предметах ни слова не было сказано почему надо тактировать выходы именно от APB2ENR. Дальнейшие поиски тоже ни к чему не привели.Вот мне и хотелось бы узнать назначение всех регистров RCC, а их там целых 10 штук:
...
В Reference Manual написано какая периферия к какой шине тактирования подключена. Вы посмотрите бегло этот документ и поймете. Регистры RCC преимущественно для настройки частот тактирования разных шин и выбор источника тактирования для МК (внутренний или внешний кварц).
КАШАК писал(а): почему надо тактировать выходы именно от APB2ENR.
...
Потому что IOPBEN намертво прикреплен к шине APB2, и тактировать его можно только от нее. Вы не сможете затактировать этот модуль от другой шины, короче.
- КАШАК
- Это не хвост, это антенна
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Спасибо 
Опыт растет прямо пропорционально выведенному из строя оборудованию...
- Солнцеворот
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вт июн 03, 2008 01:39:47
Re: STM32 новичку в ARM что к чему
КАШАК писал(а):Спасибо
Ставьте плюсик к сообщению, чтобы не засорять тему сообщениями благодарностей

- КАШАК
- Это не хвост, это антенна
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Пытаюсь разобраться с таймерами STM32 VL. Вроде все просто, но при этом ничего не работает
Итак, я пишу:
Вот этот самый код и не работает, прерывания не срабатывают, светодиод не светится. Что я делаю не так?
P.S.
Код пишу в Eclipse.
Итак, я пишу:
Код: Выделить всё
#include "src/stm32f10x.h"
#define LED_ON GPIOB->BSRR = 0x00000100
#define LED_OFF GPIOB->BSRR = 0x01000000
void TIM6_DAC_IRQHandler(void)
{
//убедиться, что причина прерывания - событие от TIM6
if(TIM6->SR & TIM_SR_UIF)
{
TIM6->SR &= ~TIM_SR_UIF; //сбросить флаг
LED_ON;
}
}
int main(){
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOB->CRH &=~ ( GPIO_CRH_CNF8 | GPIO_CRH_MODE8);
GPIOB->CRH |= ( GPIO_CRH_MODE8_1);
//настройка таймера TIM6
RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; //подаем тактирование на TIM6
TIM6->PSC = 24000-1; //настроить делитель для формирования миллисекунд
TIM6->ARR = 500; //500 миллисекунд
TIM6->DIER = TIM_DIER_UIE; //разрешить событие от таймера
TIM6->CR1 = TIM_CR1_CEN | TIM_CR1_ARPE; //разрешить перезагрузку и включить таймер
NVIC_EnableIRQ (TIM6_DAC_IRQn); //разрешить прерывания от таймера
__enable_irq(); //разрешить "глобальные" прерывания
while(1){
}
return 0;
}Вот этот самый код и не работает, прерывания не срабатывают, светодиод не светится. Что я делаю не так?
P.S.
Код пишу в Eclipse.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Re: STM32 новичку в ARM что к чему
В таблицу прерываний то TIM6_DAC_IRQHandler попадает ? 
- КАШАК
- Это не хвост, это антенна
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
- Контактная информация:
Re: STM32 новичку в ARM что к чему
А как это проверить? Пример брал из инета...
Ха. Если этот код скомпилировать в CooCox, то все работает. Вопрос, что за Х...???
Ха. Если этот код скомпилировать в CooCox, то все работает. Вопрос, что за Х...???
Опыт растет прямо пропорционально выведенному из строя оборудованию...
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: STM32 новичку в ARM что к чему
Сравнить название обработчика с тем что прописано в стартапе. У меня бывало тоже не работали примеры скопипастенные с разных мест из за различий в названиях функций.
Re: STM32 новичку в ARM что к чему
Так стартап это тоже часть исходников (в не детских пакетах
) так что смена компилятора на повторяемость результата влиять не должна -))


