Re: Частотомер
Попробуйте прошить stm32 используя - http://rcl-radio.ru/?p=68376
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → STM32 → Частотомер
Попробуйте прошить stm32 используя - http://rcl-radio.ru/?p=68376
После прошивки надо перемычку возвращать в исходное положение не выключая Ардуино ИДЕ?
Я прошил, отключил питание и переставил перемычку.
Как завершать прошивку? После того как успешно прошилось, какие действия?
сегодня еще раз попробую перепрошить и в конце выключить питание (выдернуть из USB)
Вот так выглядит
Arduino IDE
Спасибо за участие.
Перепрошивка не помогла. У меня программа прошивается с адреса 0х08000100 до 0х080038е4, а flash STM32 начинается с 0х08000000. То есть у меня прошивка начинается не в начало flash. Наверное поэтому программа не стартует автоматом при включении.
Вы прошивали по этой методике - http://rcl-radio.ru/?p=68376 ?
Да
Попробуйте этот скетч, я добавил паузу в основной цикл, возможно дело в индикаторе.
#include <LedControl.h>//https://github.com/wayoda/LedControl/archive/master.zip
LedControl lc = LedControl(PB1,PB10,PB11,1);// DIN(PB1), CLK(PB10), CS(PB11)
volatile int mon_flag;
unsigned long freq;
byte fq[8],pd,x;
void setup() {
Serial.begin(9600);
lc.shutdown(0, false);
lc.setIntensity(0,8); // яркость 0-15
lc.clearDisplay(0);
pinMode(PA15,INPUT_PULLDOWN); // вход частотомера
delay(100);
RCC_BASE->APB1ENR|= (1<<2)|(1<<1)|(1<<0); //включить тактирование tim-2,3,4
RCC_BASE->APB2ENR|= (1<<3)|(1<<11)|(1<<2)|(1<<0)|(1<<4);////включить тактирование port-a-b-c,tim1
AFIO_BASE->MAPR=(1<<8)|(1<<6); //tim 1 && tim 2 Partial remap
}
void loop() {
freq_meter();
Serial.println(freq);
fq[7]= freq/10000000%10;
fq[6]= freq/1000000%10;
fq[5]= freq/100000%10;
fq[4]= freq/10000%10;
fq[3]= freq/1000%10;
fq[2]= freq/100%10;
fq[1]= freq/10%10;
fq[0]= freq%10%10;
if(freq>=10000000){x=8;}
if(freq<10000000){lc.setRow(0,7,0);x=7;}
if(freq<1000000){lc.setRow(0,6,0);x=6;}
if(freq<100000){lc.setRow(0,5,0);x=5;}
if(freq<10000){lc.setRow(0,4,0);x=4;}
if(freq<1000){lc.setRow(0,3,0);x=3;}
if(freq<100){lc.setRow(0,2,0);x=2;}
if(freq<10){lc.setRow(0,1,0);x=1;}
for(int i = 0;i < x;i++){
if(i==3){pd=true;}
else if(i==6){pd=true;}
else if(i==9){pd=true;}
else{pd=false;}
lc.setDigit(0,i,fq[i],pd);}
delay(100);
}
void freq_meter(){ // http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino#comment-296530
__asm volatile( "cpsid i" );
/// Timer2 счёт младших 16 бит
TIMER2_BASE->CR1=0;//стоп таймер
TIMER2_BASE->CCER=0; TIMER2_BASE->PSC=0; TIMER2_BASE->CNT=0;
TIMER2_BASE->CCR1=0; TIMER2_BASE->CCR2=0; TIMER2_BASE->CCR3=0;
TIMER2_BASE->CCR4=0;TIMER2_BASE->PSC=0;TIMER2_BASE->SR=0;
TIMER2_BASE->CCMR2=0;
TIMER2_BASE->CR2=1<<5; //MMS:010 управление подчинённым в режиме "Update"
TIMER2_BASE->SMCR= (1<<14);// ECE & TS:000 режим 2 внешнего тактирования & разрешение работы от таймера1
TIMER2_BASE->ARR=65535; //считать до максимума
TIMER2_BASE->EGR=1; //перечитать регистры.
TIMER2_BASE->CR1|=(1<<0);//start timer2
/// Timer3 счёт старших 16 бит
TIMER3_BASE->CR1=1<<0;//стоп таймер
TIMER3_BASE->CCER=0; TIMER3_BASE->PSC=0; TIMER3_BASE->CNT=0;
TIMER3_BASE->CCR1=0; TIMER3_BASE->CCR2=0; TIMER3_BASE->CCR3=0;
TIMER3_BASE->CCR4=0;TIMER3_BASE->PSC=0;TIMER3_BASE->SR=0;TIMER3_BASE->CR2=0;
TIMER3_BASE->CCMR1=0;
TIMER3_BASE->SMCR=(1<<2)|(1<<1)|(1<<0)|(1<<4);//SMS:111 && TS:001 такт брать от 2-го таймера
TIMER3_BASE->ARR=65535; //считать до
TIMER3_BASE->EGR=1; //перечитать регистры.
TIMER3_BASE->CR1|=(1<<0);//start timer3
/// настройка времени разрешения на таймере1 для таймера2
TIMER1_BASE->CR1=(1<<3)|(1<<2);//один импульс, без прерываний
TIMER1_BASE->CNT=0;
TIMER1_BASE->CR2=(1<<4); //MMS:001 сигнал разрешения работы другим таймерам
TIMER1_BASE->CCER=0;// отключить выходы таймера на физ ноги
TIMER1_BASE->PSC=F_CPU/36000 -1 ;// 1999; // 72000000/2000= 36000кГц тактовая таймера
TIMER1_BASE->ARR=36000;//считать до 36000 (1секунда)
TIMER1_BASE->EGR=1; //перечитать регистры.
TIMER1_BASE->CR1|=(1<<0);
__asm volatile( "cpsie i" );
while (TIMER1_BASE->CR1&1) {asm volatile("nop"); if(mon_flag) {return;} }
freq = TIMER3_BASE->CNT<<16 | TIMER2_BASE->CNT ;
}
Спасибо, попробую.
Прошил новым скетчем, ничего не изменилось, не включается. Загрузка все равно начинается с адреса 0х08000100. На днях придет новая плата STM32F103C6T6. попробую собрать с новой платой и другим индикатором. Скетч для С6 вместо С8 подойдет?
Скетч для С6 вместо С8 подойдет?
Не могу точно сказать, но скорее всего подойдет.
Сделал по-новому. Новая плата STM32F103C6T6 + новый индикатор, собрал на разъемах. Скетч прошился нормально. Но все осталось по-старому: при подаче питания включается STM32, а индикатор нет. Надо нажимать на плате Сброс, тогда включается индикатор и работает. Проблема осталась.
Скетч прошивается как в статье "STM32 Arduino IDE", начало с адреса 0х08000100, а старт начинается с адреса 0х08000000, а эта ячейка пустая....Наверно поэтому программа и не стартует.
1
Проверьте настройки
Ничего не получается. У меня скетч компилируется размером 14564 байт, и прошивается с адреса 0х08000100 по 0х080038е4. Пробовал Ардуино 1.6.10(не работает, выдает ошибку), 1.8.2 и 1.8.15. Всё без толку. Может отправите мне свой скомпилированный файл *.ino.bin, находится в папке С:\Пользователи\..\Мои документы\Arduino\sketch_..\data. Попробую прошить им, может получится. Моя почта: steklo-rez@yandex.ru
Спасибо
Файл в плату С6 не загрузился, в плату С8 загрузился, но индикатор по прежнему не включается, надо давить Reset и тогда все работает. Больше не буду мучиться, выведу Reset и будет кнопкой включения.
Поставьте емкость 1-100 мкФ на вход RESET (относительно GND), возможно это поможет. Сброс будет происходить не при подачи питания, а чуть позже.
После перерыва продолжил заниматься частотомером. Поставил смд керамику 10мкф параллельно кнопке Reset, и частотомер начал включаться при подаче питания. Проблема решилась. На плате 10к+0,1мк постоянная времени 1мс сброс происходил быстро индикатор не успевал включится, добавив 10мк постоянная времени стала 100мс и теперь успевает. Правильно я понимаю?
Да, все верно.
forum.rcl-radio.ru → STM32 → Частотомер
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|