STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
По сути, критичные по таймингам там только три процедуры: сброса, записи бита в линию и чтения бита с линии. Все задержки в них можно жестко задавать таймером и быть стопроцентно уверенным, что в линию они уйдут именно таким образом. Нет там каких-то сигналов, которые бы требовали изучения с помощью ЛА. Я в свое время писал oneWire с нуля и не припоминаю, чтобы с ним возникли какие-то трудности.
- Реклама
Re: STM32 новичку в ARM что к чему
Мы все прекрасно помним во что выливаются расчеты ардуиноклоуна-теоретика.a5021 писал(а): Нет там каких-то сигналов, которые бы требовали изучения с помощью ЛА.
И если он начнет настаивать, можем снова ткнуть носом...
Re: STM32 новичку в ARM что к чему
Не с вашими талантами.
Re: STM32 новичку в ARM что к чему
у STM32F030F4 флеш реально 32КBenTech писал(а):Что подразумевается под to 256kB? Можно расширить штатную флеш до 256 кбайт с помощью внешней флешки, которая будет висеть на шине данных?
Re: STM32 новичку в ARM что к чему
И с каких это пор?
- Реклама
Re: STM32 новичку в ARM что к чему
Это недокументированный "бонус" без каких либо гарантий - http://we.easyelectronics.ru/pteriks/re ... stm32.htmla5021 писал(а):И с каких это пор?
Re: STM32 новичку в ARM что к чему
Спасибо за инфу. На досуге возьмусь как-нибудь проверить.
Re: STM32 новичку в ARM что к чему
Добрый день, стараюсь запустить шим на 1 канале 4 таймера на stm32f103vet6
В чём может быть ошибка?
Код: Выделить всё
RCC->APB2ENR |= RCC_APB2ENR_IOPDEN | RCC_APB2ENR_AFIOEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
//PD12 push-pull
GPIOD->CRH &= ~GPIO_CRH_CNF12;
GPIOD->CRH |= GPIO_CRH_CNF12_1;
GPIOD->CRH &= ~GPIO_CRH_MODE12;
GPIOD->CRH |= GPIO_CRH_MODE12_1;
GPIOD->CRH |= GPIO_CRH_MODE12_1;
TIM4->PSC = 72;
TIM4->ARR = 204;
TIM4->CCR1 = 102;
TIM4->CCER |= TIM_CCER_CC1E;
TIM4->CCER &= ~TIM_CCER_CC1P;
TIM4->BDTR |= TIM_BDTR_MOE;
TIM4->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
TIM4->CR1 &= ~TIM_CR1_DIR;
TIM4->CR1 &= ~TIM_CR1_CMS;
TIM4->CR1 |= TIM_CR1_CEN;
В чём может быть ошибка?
Последний раз редактировалось baghear Вс сен 13, 2015 21:51:04, всего редактировалось 2 раза.
Re: STM32 новичку в ARM что к чему
Код: Выделить всё
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN | | RCC_APB2ENR_IOPDEN;
Это что за конструкция такая? Не считая синтаксической ошибки, Таймер и GPIO ведь на разных шинах висят (APB1, APB2), поэтому GPIO не затактируется.
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // Включаем тактирование TIM4
RCC->APB2ENR |= RCC_APB2ENR_IOPDEN; // Включаем тактирование GPIOD
К тому же, если используются альтернативные функции ввода-вывода (AFIO), надо затактировать блок альтернативных функций.
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
Код: Выделить всё
//PD12 push-pull
Почему PD12? TIM4_CH1 по-умолчанию на ножке PB6. На PD12 надо делать remap.
AFIO->MAPR |= AFIO_MAPR_TIM4_REMAP;
Зачем-то два раза записали GPIOD->CRH |= GPIO_CRH_MODE12_1; (хоть на функционирование и не влияет, но лишнее)
P.S. Если что, я сам только недавно начал осваивать STM32.
Последний раз редактировалось Jeka_M Вс сен 13, 2015 21:54:04, всего редактировалось 2 раза.
Re: STM32 новичку в ARM что к чему
Вы правы, но у меня в другом месте, раньше, включается тактирование порта и альтернативных функций.Код:
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN | RCC_APB2ENR_IOPDEN;
Это что за конструкция такая? Не считая синтаксической ошибки, Таймер и GPIO ведь на разных шинах висят (APB1, APB2).
Да надо делать ремап, спасибо!!!
http://prntscr.com/8fz3r8
Re: STM32 новичку в ARM что к чему
Приветствую всех!
Ребят, а кто-нибудь делал распознование речи на STM32? Реально ли? А то нашел только одну статью с STM34F4Discovery, но и там говорилось мол "задача не простая, поэтому применяем Google".
Цель такая: сделать распознование определенного количества фраз - около 50.
P.S. Пока интересуюсь чисто теоретически
...
Ребят, а кто-нибудь делал распознование речи на STM32? Реально ли? А то нашел только одну статью с STM34F4Discovery, но и там говорилось мол "задача не простая, поэтому применяем Google".
Цель такая: сделать распознование определенного количества фраз - около 50.
P.S. Пока интересуюсь чисто теоретически
Re: STM32 новичку в ARM что к чему
При распознании речи железо это самая меньшая из проблем.
Осознать и написать алгоритм объёмная работенка.
Я бы попробовал где нить этот алгоритм позаимствовать - так быстрей.
Можно глянуть сайты - если ли у кого алгоритмы опознавания речи на клиентской стороне или исходники приложении опознавания.
Осознать и написать алгоритм объёмная работенка.
Я бы попробовал где нить этот алгоритм позаимствовать - так быстрей.
Можно глянуть сайты - если ли у кого алгоритмы опознавания речи на клиентской стороне или исходники приложении опознавания.
Re: STM32 новичку в ARM что к чему
Что то на STM32F407 шумит АЦП. Прыгает макс-мин ~ 5*16
Настройки чисел в инициации не дали ничего.
Резики на землю и кондеры есть.
Посмотрел питания осцилом - вроде чисто всё. Наверно надо делать усреднение, но тут HAL как всегда.
Что нить имел с этим дело?
Настройки чисел в инициации не дали ничего.
Резики на землю и кондеры есть.
Посмотрел питания осцилом - вроде чисто всё. Наверно надо делать усреднение, но тут HAL как всегда.
Что нить имел с этим дело?
Код: Выделить всё
init:
ADC_ChannelConfTypeDef sConfig;
hadc1.Instance=ADC1;
hadc1.Init.ClockPrescaler=ADC_CLOCKPRESCALER_PCLK_DIV2;
hadc1.Init.Resolution=ADC_RESOLUTION12b;
hadc1.Init.ScanConvMode=DISABLE;
hadc1.Init.ContinuousConvMode=ENABLE;
hadc1.Init.DiscontinuousConvMode=DISABLE;
hadc1.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONV_T1_CC1;
hadc1.Init.DataAlign=ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion=1;
hadc1.Init.DMAContinuousRequests=ENABLE;
hadc1.Init.EOCSelection=DISABLE;
HAL_ADC_Init(&hadc1);
sConfig.Channel=ADC_CHANNEL_1;
sConfig.Rank=1;
sConfig.SamplingTime=ADC_SAMPLETIME_28CYCLES;
HAL_ADC_ConfigChannel(&hadc1,&sConfig);
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adcData,1);
MSP:
void HAL_ADC_MspInit(ADC_HandleTypeDef*hadc)
{GPIO_InitTypeDef GPIO_InitStruct;
static DMA_HandleTypeDef hdma;
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_ADC1_CLK_ENABLE();
__HAL_RCC_DMA2_CLK_ENABLE();
GPIO_InitStruct.Pin=GPIO_PIN_1;
GPIO_InitStruct.Mode=GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull=GPIO_NOPULL;
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
hdma.Instance=DMA2_Stream4;
hdma.Init.Channel=DMA_CHANNEL_0;
hdma.Init.Direction=DMA_PERIPH_TO_MEMORY;
hdma.Init.PeriphInc=DMA_PINC_DISABLE;
hdma.Init.MemInc=DMA_MINC_ENABLE;
hdma.Init.PeriphDataAlignment=DMA_PDATAALIGN_WORD;
hdma.Init.MemDataAlignment=DMA_MDATAALIGN_WORD;
hdma.Init.Mode=DMA_CIRCULAR;
hdma.Init.Priority=DMA_PRIORITY_HIGH;
hdma.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
hdma.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_HALFFULL;
hdma.Init.MemBurst=DMA_MBURST_SINGLE;
hdma.Init.PeriphBurst=DMA_PBURST_SINGLE;
HAL_DMA_Init(&hdma);
__HAL_LINKDMA(hadc,DMA_Handle,hdma);
HAL_NVIC_SetPriority(DMA2_Stream4_IRQn,4,4);
HAL_NVIC_EnableIRQ(DMA2_Stream4_IRQn);}
Re: STM32 новичку в ARM что к чему
Здравствуйте, подскажите кто как подключает термодатчик DS18B20 по 1-wire.
Просто у меня основной критерий что бы он не мешал работе основной программе своими дурацкими задержками, по этому смотрю в сторону подключения через USART. Есть ещё какие-нибудь оригинальные способы подключения ?
Просто у меня основной критерий что бы он не мешал работе основной программе своими дурацкими задержками, по этому смотрю в сторону подключения через USART. Есть ещё какие-нибудь оригинальные способы подключения ?
Re: STM32 новичку в ARM что к чему
Я как-то писал обмен по 1-wire при помощи CapCom канала таймера. По мне, так даже проще USART-а.
Re: STM32 новичку в ARM что к чему
a5021,Благодарю за помощь позже может разберусь, жаль что код на с плюсами там я ни в зуб ногой =(.
Блин теперь таймер начал барахлить работал работал потом бац перестал в таймер не лез в главном цикле всё делал.
всё убрал оставил только инициализацию таймера, и всё равно в отладке в обработчик TIM3_IRQHandler не заходит.
Уже такое было откатился назад там по химичил заработало вернулся обратно работает. Вот опять обработчик отвалился.
Может это из за того что в стратапе свою функцию воткнул?
Блин теперь таймер начал барахлить работал работал потом бац перестал в таймер не лез в главном цикле всё делал.
всё убрал оставил только инициализацию таймера, и всё равно в отладке в обработчик TIM3_IRQHandler не заходит.
Уже такое было откатился назад там по химичил заработало вернулся обратно работает. Вот опять обработчик отвалился.
Код: Выделить всё
void timer_init(void){
TIM_TimeBaseInitTypeDef TIM_InitStructure;
//-------------------- таймера 2 для delay_ms--------------------------
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM2->PSC =48000-1; //настроить делитель для формирования миллисекунд было 16000
TIM2->CR1 = TIM_CR1_OPM; //режим одного импульса
//-----------------------------------------------
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
//-----------------------------------------------
TIM_InitStructure.TIM_Prescaler = 48-1; // Тактовая частота 48MHz/48=частота 1MHz
TIM_InitStructure.TIM_Period = 1000; // 1ms
TIM_TimeBaseInit(TIM3, &TIM_InitStructure);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
NVIC_EnableIRQ(TIM3_IRQn);
}
Код: Выделить всё
void TIM3_IRQHandler(void){
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){
servic_timer();
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
Код: Выделить всё
PUBWEAK Reset_Handler
SECTION .text:CODE:REORDER(2)
Reset_Handler
LDR R0, =init_rcc
BLX R0
LDR R0, =__iar_program_start
BX R0
PUBWEAK NMI_Handler
SECTION .text:CODE:REORDER(1)
NMI_HandlerСпойлер
Код: Выделить всё
void init_rcc(void){
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
RCC_DeInit();
// Enable HSE
RCC_HSEConfig(RCC_HSE_ON);
do{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSERDY) != RESET)
{
HSEStatus = (uint32_t)0x01;
}
else
{
HSEStatus = (uint32_t)0x00;
}
if (HSEStatus == (uint32_t)0x01)
{
/* Enable Prefetch Buffer */
//RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_4); //70Mhz =10*7
//---------------------------------------------------------------HSI--PLL
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_10); //8/2MHz =(8/2)*10=40 MHz
RCC_PLLCmd(ENABLE);
//RCC_PLLI2SConfig(2,2);
//RCC_PLLI2SCmd(ENABLE);
//RCC_ClockSecuritySystemCmd(ENABLE);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_HCLKConfig(RCC_SYSCLK_Div1); //SYSCLK(64)
// делим SYSCLK(64) на 4 =16 на RCC_APB1_APB2_Clock_Source
RCC_PCLK1Config(RCC_HCLK_Div1); // RCC_HCLK_Div4
//---------------------------------------------------------
debug_RCC();
//---------------------------------------------------------
}else{
while(1){
RED_LED_ON;
}
}
}Re: STM32 новичку в ARM что к чему
Возможно конфликтуют вот эти строчки
TIM2->CR1 = TIM_CR1_OPM; //режим одного импульса
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
TIM2->CR1 = TIM_CR1_OPM; //режим одного импульса
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
Re: STM32 новичку в ARM что к чему
Приветствую всех)
STM продолжает удивлять меня способностью создавать сложности и жопости в простых вещах
.На сей раз предметом стал АЦП.
В кровь бьюсь пытаясь заставить работать два канала. Хочу попробовать скомпенсировать шум (+-2 единицы на 12 битах) проверяя два канала - один с сигналом, а второй без, и затем вычислить шум с пустого канала с полученных результатов на первом канале.
МК STM32f030 - регистр данных один, каналов несколько. Читал RM, нашел бит выбора канала - CHSEL (изменять нужно при ADSTART=0). Считываю первые данные с ADC_DR, сбрасываю ADSTART, сбрасываю предыдущий канал в CHSEL и ставлю нужный, запускаю ADSTART считываю второй результат (и так по кругу) - в результате полная херня ахинея в переменных с данными. Один канал опрашивается нормально...
Может я не то что-то делаю?
STM продолжает удивлять меня способностью создавать сложности и жопости в простых вещах
В кровь бьюсь пытаясь заставить работать два канала. Хочу попробовать скомпенсировать шум (+-2 единицы на 12 битах) проверяя два канала - один с сигналом, а второй без, и затем вычислить шум с пустого канала с полученных результатов на первом канале.
МК STM32f030 - регистр данных один, каналов несколько. Читал RM, нашел бит выбора канала - CHSEL (изменять нужно при ADSTART=0). Считываю первые данные с ADC_DR, сбрасываю ADSTART, сбрасываю предыдущий канал в CHSEL и ставлю нужный, запускаю ADSTART считываю второй результат (и так по кругу) - в результате полная херня ахинея в переменных с данными. Один канал опрашивается нормально...
Может я не то что-то делаю?
Re: STM32 новичку в ARM что к чему
Ты осознаешь, что ADC один ? На входе тупо мултиплексер.isx писал(а):Хочу попробовать скомпенсировать шум (+-2 единицы на 12 битах) проверяя два канала - один с сигналом, а второй без, и затем вычислить шум с пустого канала с полученных результатов на первом канале.
МК STM32f030 - регистр данных один, каналов несколько.
Поэтому и регистр данных один. И шум никакой не 'вычислишь'.
Re: STM32 новичку в ARM что к чему
Это понятно. Шум в самом МК (от перефирии и питания скорее всего ). Его я таким образом и хочу компенсировать.Satyr писал(а):Ты осознаешь, что ADC один ? На входе тупо мултиплексер.
А что с алгоритмом опроса, верный?


