Mailhouse
Солнце 20 ноября 2016 г. 18:10
#include "Streaming.h"
uint8_t pin, port, n;
void setup() {
Serial.begin(115200);
while (!Serial);
delay(10);
Serial << "Analog Pins: " << BOARD_NR_ADC_PINS << endl;
for (n = 0; n < BOARD_NR_ADC_PINS ; n++) {
pin = boardADCPins[n];
if (pin < 16) {
Serial.print("PA");
} else if (pin >= 16 && pin < 32) {
Serial.print("PB");
pin -= 16;
} else if (pin >= 32 && pin < 48) {
Serial.print("PC");
pin -= 32;
}
Serial.println(pin);
}
Serial.println();
Serial << "PWM Pins: " << BOARD_NR_PWM_PINS << endl;
for (n = 0; n < BOARD_NR_PWM_PINS ; n++) {
pin = boardPWMPins[n];
if (pin < 16) {
Serial.print("PA");
} else if (pin >= 16 && pin < 32) {
Serial.print("PB");
pin -= 16;
} else if (pin >= 32 && pin < 48) {
Serial.print("PC");
pin -= 32;
}
Serial.println(pin);
}
Serial.println();
Serial << "Board Pins: " << BOARD_NR_USED_PINS << endl;
for (n = 0; n < BOARD_NR_USED_PINS ; n++) {
pin = boardUsedPins[n];
if (pin < 16) {
Serial.print("PA");
} else if (pin >= 16 && pin < 32) {
Serial.print("PB");
pin -= 16;
} else if (pin >= 32 && pin < 48) {
Serial.print("PC");
pin -= 32;
}
Serial.println(pin);
}
Serial.println();
Serial << "All GPIO Pins: " << BOARD_NR_GPIO_PINS << endl;
for (n = 0; n < BOARD_NR_GPIO_PINS ; n++) {
pin = PIN_MAP[n].gpio_bit;
//port = PIN_MAP[n].gpio_device -> regs; //conversion?
//workaround
port = n;
if (port < 16) {
Serial.print("PA");
} else if (port >= 16 && port < 32) {
Serial.print("PB");
} else if (port >= 32 && port < 48) {
Serial.print("PC");
}
Serial.println(pin);
//more info
Serial << "Mode: " << PIN_MAP[n].pinMode << endl;
Serial << "ADC: " << PIN_MAP[n].adc_channel << endl;
Serial << "Timer: " << PIN_MAP[n].timer_channel << endl << endl;
//if adc_channes is 255 (0xFF) the pin is not analog
}
}
void loop() {}
Даниэфф
Солнце 20 ноября 2016 г., 19:36
Попробуйте перекомпилировать статическую библиотеку, запустить в систему \ libstm32l4 \ build_gcc
Mailhouse
Солнце 20 ноября 2016 г., 22:02
Даниэфф написал:Попробуйте перекомпилировать статическую библиотеку, запустить в систему \ libstm32l4 \ build_gcc
Rogerclark
Солнце 20 ноября 2016 г., 22:43
Похоже, STM выбирайте не включать множество функций в L4, включая RND
https: // github.com/stm32duino/arduino_c ... конфликт.H#183
Я не уверен в причине этого. Я не уверен, что RNG -код его самостоятельно заявляет о любых статических закусках, которые потребуют ОЗУ, или необходимы другие функции инициирования, чтобы выполнить RNG и т. Д. (Вероятно, нет)
В любом случае, в настоящее время ваш единственный вариант - изменить этот файл и восстановить статическую библиотеку после изменения этого заголовка, чтобы включить желаемые функции.
Я опубликую об этом проблему GitHub.
https: // github.com/stm32duino/arduino_c ... конфликт.H#183
Я не уверен в причине этого. Я не уверен, что RNG -код его самостоятельно заявляет о любых статических закусках, которые потребуют ОЗУ, или необходимы другие функции инициирования, чтобы выполнить RNG и т. Д. (Вероятно, нет)
В любом случае, в настоящее время ваш единственный вариант - изменить этот файл и восстановить статическую библиотеку после изменения этого заголовка, чтобы включить желаемые функции.
Я опубликую об этом проблему GitHub.
Mailhouse
Пн 21 ноября 2016 г., 3:14
Я очень благодарю вас за ваше терпение. Я буду вмешиваться и помогу любым способом, но я зависим от вашего руководства. У меня есть доска Nucleo F103, доска ядер L476, некоторые светодиоды [пока нет осциллографа] и большой энтузиазм.
Как съесть слона?
Один укус за раз.
Как съесть слона?
Один укус за раз.
Rogerclark
Пн 21 ноября 2016 г., 3:27 утра
@mailhouse
Я думаю, что вы один из первых, кто активно использует Nucleo L476, так что вы в некоторой степени на кровотечении с этим.
У меня есть Nucleo L476 (который мне прислал), и я сделал несколько быстрых тестов E.глин. Подключение SPI и I2C, и я обнаружил некоторые проблемы с тактовой частотой процессора, а также с тактовой скоростью SPI, но я не пытался использовать функции HAL.
Я не знаю, заключила ли компания, которая заключила контракт с STM на написание кода (WI6LABS), активно отслеживает проблемы в GitHub, но я уже отправил им электронное письмо сегодня, в связи с некоторым менее оптимальным кодом (тратит драгоценные оперативные памяти на F1 и делает то же самое на L4 - но на L4 не имеет большого значения, потому что у него много оперативной памяти), так что, надеюсь, Wi6labs рассмотрит все открытые проблемы в L4, и, возможно, STM вернется ко мне.
КСТАТИ. Вы установили пакет через Manager или клонирование или загрузку из GitHub ?
Я думаю, что вы один из первых, кто активно использует Nucleo L476, так что вы в некоторой степени на кровотечении с этим.
У меня есть Nucleo L476 (который мне прислал), и я сделал несколько быстрых тестов E.глин. Подключение SPI и I2C, и я обнаружил некоторые проблемы с тактовой частотой процессора, а также с тактовой скоростью SPI, но я не пытался использовать функции HAL.
Я не знаю, заключила ли компания, которая заключила контракт с STM на написание кода (WI6LABS), активно отслеживает проблемы в GitHub, но я уже отправил им электронное письмо сегодня, в связи с некоторым менее оптимальным кодом (тратит драгоценные оперативные памяти на F1 и делает то же самое на L4 - но на L4 не имеет большого значения, потому что у него много оперативной памяти), так что, надеюсь, Wi6labs рассмотрит все открытые проблемы в L4, и, возможно, STM вернется ко мне.
КСТАТИ. Вы установили пакет через Manager или клонирование или загрузку из GitHub ?
Mailhouse
Пн 21 ноября 2016 г., 12:05
Я скачиваю с github.
Кроме того, это удивительно, что сон на нем, иногда иногда.
Этот код генерирует действительно случайные числа. Моя проблема, как и была до сих пор, заключалась в том, что я не настраивал периферийные устройства на часы.
Кроме того, это удивительно, что сон на нем, иногда иногда.
Этот код генерирует действительно случайные числа. Моя проблема, как и была до сих пор, заключалась в том, что я не настраивал периферийные устройства на часы.
HardwareTimer timer1(1); timer1.setPeriod(40);
HardwareTimer timer4(4); timer4.setPeriod(40);
Rogerclark
Пн 21 ноября 2016 г., 19:30
@Danieleff прокомментировал в выпуске, который я опубликовал в GitHub, и похоже, что включение RNG и т. Д. Не влияет на размер эскиза, поскольку линкера не включают функции, которые вы не используете.
Хотя я не совсем уверен, следует ли нам внести абсолютно все.
Хотя я не совсем уверен, следует ли нам внести абсолютно все.
Grumpyoldpizza
Вт 22 ноября 2016 г. 12:17
Mailhouse написал:Я скачиваю с github.
Кроме того, это удивительно, что сон на нем, иногда иногда.
Этот код генерирует действительно случайные числа. Моя проблема, как и была до сих пор, заключалась в том, что я не настраивал периферийные устройства на часы.
Кроме того, это удивительно, что сон на нем, иногда иногда.
Этот код генерирует действительно случайные числа. Моя проблема, как и была до сих пор, заключалась в том, что я не настраивал периферийные устройства на часы.
void HardwareTimer::setMasterModeTrGo(uint32_t mode) {
this->dev->regs.bas->CR2 &= ~TIMER_CR2_MMS;
this->dev->regs.bas->CR2 |= mode;
}
Grumpyoldpizza
Вт 22 ноября 2016 г. 1:00
Извините, должно было быть более точным. Это то, что должно быть в hw_config.C:
//INIT
const int8_t sineU[] = {
0,3,7,10,14,17,21,24,28,31,34,37,41,44,47,50,53,56,59,62,64,67,69,72,74,77,79,81,83,85,
87,88,90,91,93,94,95,96,97,98,98,99,99,99,99,99,99,99,99,99,98,98,97,96,95,94,93,91,90,88,
87,85,83,81,79,77,74,72,69,67,64,62,59,56,53,50,47,44,41,37,34,31,28,24,21,17,14,10,7,3,
0,-3,-7,-10,-14,-17,-21,-24,-28,-31,-34,-37,-41,-44,-47,-50,-53,-56,-59,-62,-64,-67,-69,-72,-74,-77,-79,-81,-83,-85,
-87,-88,-90,-91,-93,-94,-95,-96,-97,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-97,-96,-95,-94,-93,-91,-90,-88,
-87,-85,-83,-81,-79,-77,-74,-72,-69,-67,-64,-62,-59,-56,-53,-50,-47,-44,-41,-37,-34,-31,-28,-24,-21,-17,-14,-10,-7,-3};
const int8_t sineV[] = {
87,85,83,81,79,77,74,72,69,67,64,62,59,56,53,50,47,44,41,37,34,31,28,24,21,17,14,10,7,3,
0,-3,-7,-10,-14,-17,-21,-24,-28,-31,-34,-37,-41,-44,-47,-50,-53,-56,-59,-62,-64,-67,-69,-72,-74,-77,-79,-81,-83,-85,
-87,-88,-90,-91,-93,-94,-95,-96,-97,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-97,-96,-95,-94,-93,-91,-90,-88,
-87,-85,-83,-81,-79,-77,-74,-72,-69,-67,-64,-62,-59,-56,-53,-50,-47,-44,-41,-37,-34,-31,-28,-24,-21,-17,-14,-10,-7,-3,
0,3,7,10,14,17,21,24,28,31,34,37,41,44,47,50,53,56,59,62,64,67,69,72,74,77,79,81,83,85,
87,88,90,91,93,94,95,96,97,98,98,99,99,99,99,99,99,99,99,99,98,98,97,96,95,94,93,91,90,88};
const int8_t sineW[] = {
-87,-88,-90,-91,-93,-94,-95,-96,-97,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-97,-96,-95,-94,-93,-91,-90,-88,
-87,-85,-83,-81,-79,-77,-74,-72,-69,-67,-64,-62,-59,-56,-53,-50,-47,-44,-41,-37,-34,-31,-28,-24,-21,-17,-14,-10,-7,-3,
0,3,7,10,14,17,21,24,28,31,34,37,41,44,47,50,53,56,59,62,64,67,69,72,74,77,79,81,83,85,
87,88,90,91,93,94,95,96,97,98,98,99,99,99,99,99,99,99,99,99,98,98,97,96,95,94,93,91,90,88,
87,85,83,81,79,77,74,72,69,67,64,62,59,56,53,50,47,44,41,37,34,31,28,24,21,17,14,10,7,3,
0,-3,-7,-10,-14,-17,-21,-24,-28,-31,-34,-37,-41,-44,-47,-50,-53,-56,-59,-62,-64,-67,-69,-72,-74,-77,-79,-81,-83,-85};
//Motor
int32_t motorStep = 0, motorPhase = 0, motorStepTimer = 0;
byte NRD = 1;
int throttle = 0;
//Debounces
uint32_t encoderDebounce = 0, gearDebounce = 0;
//PIN ASSIGNMENT
#define UH PB9
#define UL PB8
#define VH PB7
#define VL PB6
#define WH PA10
#define WL PA9
#define REVERSESW PB1
#define DRIVESW PB0
//int UH = PB9, UL = PB8, VH = PB7, VL = PB6, WH = PA10, WL = PA9;
//int REVERSESW = PB1, DRIVESW = PB0;
//FLOATS AND OTHERS
int32_t kU = 0, kV = 0, kW = 0;
int16_t jU = 0, jV = 0, jW = 0, currentStep = 0, oldStep = 0;
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void setup(){
//PINMODE
afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY);
adc_set_sample_rate(ADC1, ADC_SMPR_7_5); adc_set_sample_rate(ADC2, ADC_SMPR_7_5);
HardwareTimer timer1(1); timer1.setPeriod(40);
HardwareTimer timer4(4); timer4.setPeriod(40);
//Serial3.begin(200000);
pinMode(REVERSESW, INPUT_PULLUP); pinMode(DRIVESW, INPUT_PULLUP);
pinMode(UL, PWM); pinMode(VL, PWM); pinMode(WL, PWM); pwmWrite(UL,0); pwmWrite(VL,0); pwmWrite(WL,0);
pinMode(UH, PWM); pinMode(VH, PWM); pinMode(WH, PWM); pwmWrite(UH,0); pwmWrite(VH,0); pwmWrite(WH,0);
//Charge BOOTSTRAP
pwmWrite(UL,2880); pwmWrite(VL,2880); pwmWrite(WL,2880);
delay(50);
pwmWrite(UL,0); pwmWrite(VL,0); pwmWrite(WL,0);
motorSquare();
//Throttle
pinMode(PA0, INPUT_ANALOG); pinMode(PA2, INPUT_PULLUP); pinMode(PA7, INPUT_PULLUP);
} //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void loop(){
//Throttle
throttle = adc_read(ADC1, 0);
//if(throttle < 409){throttle = 0;}
//GEAR
//if(digitalRead(REVERSESW) == digitalRead(DRIVESW)){NRD = 2;}
//if(digitalRead(REVERSESW) == LOW){NRD = 1;} if(digitalRead(DRIVESW) == LOW){NRD = 3;}
//if(NRD == 2){throttle = 0;}
if(micros() - motorStepTimer > throttle*100){motorSine();}
} // VOID LOOP END --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void motorSine(){
kU = (sineU[motorStep]*288)/10;
if(kU == 0){pwmWrite(UH,0); pwmWrite(UL,0);}
if(kU > 0){pwmWrite(UH,kU); pwmWrite(UL,0);}
if(kU < 0){kU = kU*-1; pwmWrite(UH,0); pwmWrite(UL,kU);}
kV = (sineV[motorStep]*288)/10;
if(kV == 0){pwmWrite(VH,0); pwmWrite(VL,0);}
if(kV > 0){pwmWrite(VH,kV); pwmWrite(VL,0);}
if(kV < 0){kV = kV*-1; pwmWrite(VH,0); pwmWrite(VL,kV);}
kW = (sineW[motorStep]*288)/10;
if(kW == 0){pwmWrite(WH,0); pwmWrite(WL,0);}
if(kW > 0){pwmWrite(WH,kW); pwmWrite(WL,0);}
if(kW < 0){kW = kW*-1; pwmWrite(WH,0); pwmWrite(WL,kW);}
motorStep++;
if(motorStep < 0){motorStep = 179;}
if(motorStep > 179){motorStep = 0;}
motorStepTimer = micros();
}
Rogerclark
Вт 22 ноября 2016 г. 7:10 утра
Grumpyoldpizza написал:Извините, должно было быть более точным. Это то, что должно быть в hw_config.C:
TIMER1->regs.bas->CR1 |= 0x20;
Grumpyoldpizza
Вт 22 ноября 2016 г., 13:28
Rogerclark написал:Grumpyoldpizza написал:Извините, должно было быть более точным. Это то, что должно быть в hw_config.C:
///////////////////////////////////////////////////////////////////////
//
// tone(pin,frequency[,duration]) generate a tone on a given pin
//
// noTone(pin) switch off the tone on the pin
//
// setToneTimerChannel(timer,channel) force use of given timer/channel
//
///////////////////////////////////////////////////////////////////////
#include "Arduino.h"
#include
// define default timer and channel
#ifndef TONE_TIMER
#define TONE_TIMER 4
#endif
#ifndef TONE_CHANNEL
#define TONE_CHANNEL 4
#endif
#define PinTimer(pin) (PIN_MAP[pin].timer_device->clk_id-RCC_TIMER1+1)
#define PinChannel(pin) (PIN_MAP[pin].timer_channel)
// if USE_PIN_TIMER is set, the PWM timer/channel is used for PWM pins
#define USE_PIN_TIMER
// if USE_BSRR is set the tone pin will be written via the fast BSRR register
// instead of using the slow digitalWrite() function in the interrupt handler
#define USE_BSRR
// construct static timer array (
HardwareTimer TTimer1(1), TTimer2(2), TTimer3(3), TTimer4(4);
#ifdef STM32_HIGH_DENSITY
HardwareTimer TTimer5(5), TTimer6(6), TTimer7(7), TTimer8(8);
#endif
HardwareTimer *TTimer[4] {
&TTimer1,&TTimer2,&TTimer3,&TTimer4
#ifdef STM32_HIGH_DENSITY
,&TTimer5,&TTimer6,&TTimer7,&TTimer8
#endif
};
uint8_t tone_force_channel = 0; // forced timer channel
uint8_t tone_force_ntimer = 0; // forced timer
HardwareTimer *tone_timer = TTimer[TONE_TIMER]; // timer used to generate frequency
uint8_t tone_channel = TONE_CHANNEL; // timer channel used to generate frequency
uint8_t tone_ntimer = TONE_TIMER; // timer used to generate frequency
bool tone_state = true; // last pin state for toggling
short tone_pin = -1; // pin for outputting sound
short tone_freq = 444; // tone frequency (0=pause)
uint32_t tone_nhw = 0; // tone duration in number of half waves
uint16_t tone_tcount = 0; // time between handler calls in 1/36 usec
uint16_t tone_ncount = 0; // handler call between toggling
uint16_t tone_n = 0; // remaining handler calls before toggling
uint32_t tone_next = 0; // counter value of next interrupt
#ifdef USE_BSRR
volatile uint32_t *tone_bsrr; // BSRR set register (lower 16 bits)
uint32_t tone_smask=0; // BSRR set bitmask
uint32_t tone_rmask=0; // BSRR reset bitmask
#endif
////////////////////////////////////////////////////////////////////////////////
// timer hander for tone with no duration specified,
// will keep going until noTone() is called
void tone_handler_1(void) {
tone_next += tone_tcount; // comparator value for next interrupt
tone_timer->setCompare(tone_channel, tone_next); // and install it
if(--tone_n == 0){
tone_state = !tone_state; // toggle tone output
#ifdef USE_BSRR
if(tone_state)
*tone_bsrr = tone_smask;
else
*tone_bsrr = tone_rmask;
#else
digitalWrite(tone_pin,tone_state);// and output it
#endif
tone_n = tone_ncount; // reset interrupt counter
}
}
////////////////////////////////////////////////////////////////////////////////
// timer hander for tone with a specified duration,
// will stop automatically when duration time is up.
void tone_handler_2(void) {
tone_next += tone_tcount;
tone_timer->setCompare(tone_channel, tone_next);
if(--tone_n == 0){
if(tone_freq>0){ // toggle pin
tone_state = !tone_state;
#ifdef USE_BSRR
if(tone_state)
*tone_bsrr = tone_smask;
else
*tone_bsrr = tone_rmask;
#else
digitalWrite(tone_pin,tone_state);// and output it
#endif
}
tone_n = tone_ncount;
if(!--tone_nhw){ // check if tone duration has finished
tone_timer->pause(); // disable timer
pinMode(tone_pin, INPUT); // disable tone pin
}
}
}
////////////////////////////////////////////////////////////////////////////////
// play a tone on given pin with given frequency and optional duration in msec
void tone(uint8_t pin, short freq, unsigned duration = 0) {
tone_pin = pin;
#ifdef USE_PIN_TIMER
// if the pin has a PWM timer/channel, use it (unless the timer/channel are forced)
if(PinChannel(tone_pin) && !tone_force_channel){
tone_channel = PinChannel(tone_pin);
tone_ntimer = PinTimer(tone_pin);
} else
#endif
{
// set timer and channel to default resp values forced with setToneTimerChannel
tone_ntimer = tone_force_channel?tone_force_ntimer:TONE_TIMER;
tone_channel = tone_force_channel?tone_force_channel:TONE_CHANNEL;
}
tone_timer = TTimer[tone_ntimer-1];
tone_freq = freq;
tone_nhw = 0;
tone_next = 0;
tone_timer->pause();
if(freq > 0 || duration >0 ){
uint32_t count = 18000000/freq; // timer counts per half wave
tone_ncount = tone_n = (count>>16)+1; // number of 16-bit count chunk
tone_tcount = count/tone_ncount; // size of count chunk
if(duration > 0) // number of half waves to be generated
tone_nhw = ((duration*(freq>0?freq:100))/1000)<<1;
else // no duration specified, continuous sound until noTone() called
tone_nhw = 0;
pinMode(tone_pin, PWM); // configure output pin
pinMode(tone_pin, OUTPUT); // configure output pin
#ifdef USE_BSRR
// Set up BSRR register values for fast ISR
tone_bsrr = &((PIN_MAP[tone_pin].gpio_device)->regs->BSRR);
tone_smask = (BIT(PIN_MAP[tone_pin].gpio_bit));
tone_rmask = tone_smask<<16;
#endif
// Set up an interrupt on given timer and channel
tone_next = tone_tcount; // prepare channel compare register
tone_timer->setMode(tone_channel,TIMER_OUTPUT_COMPARE);
tone_timer->setCompare(tone_channel,tone_next);
// attach corresponding handler routine
tone_timer->attachInterrupt(tone_channel,tone_nhw?tone_handler_2:tone_handler_1);
// Refresh the tone timer
tone_timer->refresh();
// Start the timer counting
tone_timer->resume();
} else {
// detach handler routine
tone_timer->detachInterrupt(tone_channel);
// disactive pin by configuring it as input
pinMode(tone_pin, INPUT);
}
}
////////////////////////////////////////////////////////////////////////////////
// disable tone on specified pin, if any
void noTone(uint8_t pin){
tone(pin,-1); // it's all handled in tone()
}
////////////////////////////////////////////////////////////////////////////////
// set timer and channel to some different value
// must be called before calling tone() or after noTone() was called
void setToneTimerChannel(uint8_t ntimer, uint8_t channel){
tone_force_ntimer = ntimer;
tone_force_channel = channel;
}
void setup() {
}
void loop() {
// Fur Elise.. almost...
// Notes (and mistakes) unashamedly stolen from -> https://gist.github.com/spara/1832855
int our_tone_pin=PB0;
// play e4
delay(600);
tone(our_tone_pin, 329.63, 300);
delay(350);
// play d4#
tone(our_tone_pin, 311.13, 300);
delay(350);
// play e4
tone( 10, 329.63, 300);
delay(350);
// play d4#
tone( 10,311.13, 300);
delay(350);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(350);
// play b3
tone( 10, 246.94, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.66,300);
delay(400);
// play c4
tone(our_tone_pin, 261.63,300);
delay(400);
// play a3
tone(our_tone_pin, 220, 900);
delay(1000);
// play d3
tone(our_tone_pin,146.83, 300);
delay(350);
//play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
//play a3
tone(our_tone_pin, 220, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 900);
delay(1000);
// play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
// play a3#
tone(our_tone_pin, 233.08, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 900);
delay(1000);
delay(300);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play d4#
tone(our_tone_pin, 311.13, 300);
delay(400);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play d4#
tone(our_tone_pin, 311.13, 300);
delay(400);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.66, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 300);
delay(400);
// play a3
tone(our_tone_pin, 220, 900);
delay(1000);
// play d3
tone(our_tone_pin, 146.83, 300);
delay(400);
// play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
// play a3
tone(our_tone_pin, 220, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 900);
delay(1000);
// play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 300);
delay(400);
// play a3
tone(our_tone_pin, 220, 900);
delay(1000);
// play b3
tone(our_tone_pin,246.94, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.66, 300);
delay(400);
// play e4
tone(our_tone_pin, 329.63, 900);
delay(1000);
// play g3
tone(our_tone_pin, 196, 300);
delay(400);
// play f4
tone(our_tone_pin, 349.23, 300);
delay(400);
//play e4
tone(our_tone_pin, 329.23, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.63, 900);
delay(1000);
// play e3
tone(our_tone_pin,164.81, 300);
delay(400);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.63, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 900);
delay(1000);
// play d3
tone(our_tone_pin, 146.83, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.63, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 900);
delay(1000);
delay(400);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play d4#
tone(our_tone_pin, 311.13, 300);
delay(350);
// play e4
tone( 10, 329.63, 300);
delay(350);
// play d4#
tone( 10,311.13, 300);
delay(350);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(350);
// play b3
tone( 10, 246.94, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.66,300);
delay(400);
// play c4
tone(our_tone_pin, 261.63,300);
delay(400);
// play a3
tone(our_tone_pin, 220, 900);
delay(1000);
// play d3
tone(our_tone_pin,146.83, 300);
delay(350);
//play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
//play a3
tone(our_tone_pin, 220, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 900);
delay(1000);
// play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
// play a3
tone(our_tone_pin, 233.08, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 900);
delay(1000);
delay(300);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play d4#
tone(our_tone_pin, 311.13, 300);
delay(400);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play d4#
tone(our_tone_pin, 311.13, 300);
delay(400);
// play e4
tone(our_tone_pin, 329.63, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 300);
delay(400);
// play d4
tone(our_tone_pin, 293.66, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 300);
delay(400);
// play a3
tone(our_tone_pin, 220, 900);
delay(1000);
// play d3
tone(our_tone_pin, 146.83, 300);
delay(400);
// play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
// play a3
tone(our_tone_pin, 220, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 900);
delay(1000);
// play f3
tone(our_tone_pin, 174.61, 300);
delay(400);
// play c4
tone(our_tone_pin, 261.63, 300);
delay(400);
// play b3
tone(our_tone_pin, 246.94, 300);
delay(400);
// play a3
tone(our_tone_pin, 220, 900);
delay(1000);
delay(5000);
}
Rogerclark
Вт 22 ноября 2016 г., 19:53
@grumpyoldpizza
Спасибо за подробное объяснение.
Поскольку нуклео постоянно питается от USB, я не думаю, что текущее потребление будет проблемой, но это было бы, если бы мы сделали общий вариант.
Возможно, путь вперед заключается в том, чтобы ОП создал библиотеку RNG и вызовет код PLL из ее функции начала.
(Я собирался сказать, что настройка RNG PLL в конструкторе, но, как мы знаем, порядок, в котором глобальные конструкторы не определены, не определяется)
Спасибо за подробное объяснение.
Поскольку нуклео постоянно питается от USB, я не думаю, что текущее потребление будет проблемой, но это было бы, если бы мы сделали общий вариант.
Возможно, путь вперед заключается в том, чтобы ОП создал библиотеку RNG и вызовет код PLL из ее функции начала.
(Я собирался сказать, что настройка RNG PLL в конструкторе, но, как мы знаем, порядок, в котором глобальные конструкторы не определены, не определяется)
Grumpyoldpizza
Вт 22 ноября 2016 г., 21:15
Rogerclark написал:@grumpyoldpizza
Спасибо за подробное объяснение.
Поскольку нуклео постоянно питается от USB, я не думаю, что текущее потребление будет проблемой, но это было бы, если бы мы сделали общий вариант.
Возможно, путь вперед заключается в том, чтобы ОП создал библиотеку RNG и вызовет код PLL из ее функции начала.
(Я собирался сказать, что настройка RNG PLL в конструкторе, но, как мы знаем, порядок, в котором глобальные конструкторы не определены, не определяется)
Спасибо за подробное объяснение.
Поскольку нуклео постоянно питается от USB, я не думаю, что текущее потребление будет проблемой, но это было бы, если бы мы сделали общий вариант.
Возможно, путь вперед заключается в том, чтобы ОП создал библиотеку RNG и вызовет код PLL из ее функции начала.
(Я собирался сказать, что настройка RNG PLL в конструкторе, но, как мы знаем, порядок, в котором глобальные конструкторы не определены, не определяется)
Rogerclark
Вт 22 ноября 2016 г., 22:19
Спасибо
Нам нужно рефакторировать код L4, как мы делали для F1, потому что в L4 Repo SystemClock_Config в настоящее время не в варианте.CPP
Нам нужно рефакторировать код L4, как мы делали для F1, потому что в L4 Repo SystemClock_Config в настоящее время не в варианте.CPP
Grumpyoldpizza
Вт 22 ноября 2016 г., 11:08 вечера
Rogerclark написал:Спасибо
Нам нужно рефакторировать код L4, как мы делали для F1, потому что в L4 Repo SystemClock_Config в настоящее время не в варианте.CPP
Нам нужно рефакторировать код L4, как мы делали для F1, потому что в L4 Repo SystemClock_Config в настоящее время не в варианте.CPP
Rogerclark
Вторник 22 ноября 2016 г., 11:59 вечера
Несколько вещей, вероятно, означают, что мы должны рефакторировать
1. Нам не хотим разных файловых структур в разных ядрах, так как это затрудняет поддержание. (См. @Danieleff's Posting)
2. Я знаю, по крайней мере, одного пользователя, который использует Arduino IDE для быстрого прототипирования для проекта с низкой мощностью, который, вероятно, будет использовать одну из серии L4 (и он в настоящее время использует Nucleo L476))
В конечном счете он намерен произвести коммерческий продукт, но технически нечего помешать ему использовать составленные двоичные файлы Arduino IDE в коммерческом продукте, если он хочет.
1. Нам не хотим разных файловых структур в разных ядрах, так как это затрудняет поддержание. (См. @Danieleff's Posting)
2. Я знаю, по крайней мере, одного пользователя, который использует Arduino IDE для быстрого прототипирования для проекта с низкой мощностью, который, вероятно, будет использовать одну из серии L4 (и он в настоящее время использует Nucleo L476))
В конечном счете он намерен произвести коммерческий продукт, но технически нечего помешать ему использовать составленные двоичные файлы Arduino IDE в коммерческом продукте, если он хочет.
Grumpyoldpizza
Ср 23 ноября 2016 г. 12:24
Rogerclark написал:Пара вещей, вероятно, означает, что мы должны рефакторировать
1. Нам не хотим разных файловых структур в разных ядрах, так как это затрудняет поддержание. (См. @Danieleff's Posting)
2. Я знаю, по крайней мере, одного пользователя, который использует Arduino IDE для быстрого прототипирования для проекта с низкой мощностью, который, вероятно, будет использовать одну из серии L4 (и он в настоящее время использует Nucleo L476))
В конечном счете он намерен произвести коммерческий продукт, но технически нечего помешать ему использовать составленные двоичные файлы Arduino IDE в коммерческом продукте, если он хочет.
1. Нам не хотим разных файловых структур в разных ядрах, так как это затрудняет поддержание. (См. @Danieleff's Posting)
2. Я знаю, по крайней мере, одного пользователя, который использует Arduino IDE для быстрого прототипирования для проекта с низкой мощностью, который, вероятно, будет использовать одну из серии L4 (и он в настоящее время использует Nucleo L476))
В конечном счете он намерен произвести коммерческий продукт, но технически нечего помешать ему использовать составленные двоичные файлы Arduino IDE в коммерческом продукте, если он хочет.
Rogerclark
Ср 23 ноября 2016 г., 12:48
Мы (я) оказался между камнем и тяжелым местом.
Люди хотят лучшей поддержки для F4 и F7, а также поддержки F0, но изменение Libmaple для работы на всех этих MCU будет большой работой, и ни у кого нет времени или энергии, чтобы сделать это.
Я надеялся, что официальное ядро STM рассмотрит это, но я бы предпочел не вкладывать в Wi6labs Offside на данный момент, поскольку Afik они должны исправить ошибки в своем коде (хотя я не знаю, закончился ли их контракт с Dev с STM или нет, и будь ли это все еще применимо)
Я знаю, что есть разговоры о создании ядра, основанного на LiboPencm3 или какой -то новой вариации этого, но я не вижу, чтобы это произошло в ближайшем будущем.
В то же время Авик де, все еще продолжает свою старую стандартную периферийную библиотеку, но в своих досках, но в своих досках.Файл TXT он, кажется, поддерживает только два разных варианта F3 и один F4 - (даже если, по -видимому, есть варианты папки для более широкого разнообразия версий MCU)
Поэтому до тех пор, пока люди заинтересованы в развитии и улучшении ядра HAL, я рад им управлять, и это может в конечном итоге стать пригодным для использования
Люди хотят лучшей поддержки для F4 и F7, а также поддержки F0, но изменение Libmaple для работы на всех этих MCU будет большой работой, и ни у кого нет времени или энергии, чтобы сделать это.
Я надеялся, что официальное ядро STM рассмотрит это, но я бы предпочел не вкладывать в Wi6labs Offside на данный момент, поскольку Afik они должны исправить ошибки в своем коде (хотя я не знаю, закончился ли их контракт с Dev с STM или нет, и будь ли это все еще применимо)
Я знаю, что есть разговоры о создании ядра, основанного на LiboPencm3 или какой -то новой вариации этого, но я не вижу, чтобы это произошло в ближайшем будущем.
В то же время Авик де, все еще продолжает свою старую стандартную периферийную библиотеку, но в своих досках, но в своих досках.Файл TXT он, кажется, поддерживает только два разных варианта F3 и один F4 - (даже если, по -видимому, есть варианты папки для более широкого разнообразия версий MCU)
Поэтому до тех пор, пока люди заинтересованы в развитии и улучшении ядра HAL, я рад им управлять, и это может в конечном итоге стать пригодным для использования
Grumpyoldpizza
Ср 23 ноября 2016 г. 1:03
Rogerclark написал:Мы (я) оказался между камнем и тяжелым местом.
Люди хотят лучшей поддержки для F4 и F7, а также поддержки F0, но изменение Libmaple для работы на всех этих MCU будет большой работой, и ни у кого нет времени или энергии, чтобы сделать это.
Я надеялся, что официальное ядро STM рассмотрит это, но я бы предпочел не вкладывать в Wi6labs Offside на данный момент, поскольку Afik они должны исправить ошибки в своем коде (хотя я не знаю, закончился ли их контракт с Dev с STM или нет, и будь ли это все еще применимо)
Я знаю, что есть разговоры о создании ядра, основанного на LiboPencm3 или какой -то новой вариации этого, но я не вижу, чтобы это произошло в ближайшем будущем.
В то же время Авик де, все еще продолжает свою старую стандартную периферийную библиотеку, но в своих досках, но в своих досках.Файл TXT он, кажется, поддерживает только два разных варианта F3 и один F4 - (даже если, по -видимому, есть варианты папки для более широкого разнообразия версий MCU)
Поэтому до тех пор, пока люди заинтересованы в развитии и улучшении ядра HAL, я рад им управлять, и это может в конечном итоге стать пригодным для использования
Люди хотят лучшей поддержки для F4 и F7, а также поддержки F0, но изменение Libmaple для работы на всех этих MCU будет большой работой, и ни у кого нет времени или энергии, чтобы сделать это.
Я надеялся, что официальное ядро STM рассмотрит это, но я бы предпочел не вкладывать в Wi6labs Offside на данный момент, поскольку Afik они должны исправить ошибки в своем коде (хотя я не знаю, закончился ли их контракт с Dev с STM или нет, и будь ли это все еще применимо)
Я знаю, что есть разговоры о создании ядра, основанного на LiboPencm3 или какой -то новой вариации этого, но я не вижу, чтобы это произошло в ближайшем будущем.
В то же время Авик де, все еще продолжает свою старую стандартную периферийную библиотеку, но в своих досках, но в своих досках.Файл TXT он, кажется, поддерживает только два разных варианта F3 и один F4 - (даже если, по -видимому, есть варианты папки для более широкого разнообразия версий MCU)
Поэтому до тех пор, пока люди заинтересованы в развитии и улучшении ядра HAL, я рад им управлять, и это может в конечном итоге стать пригодным для использования
Rogerclark
Ср 23 ноября 2016 г. 1:14
С F4 я думаю, что его доступность, так как китайцы делают несколько досок F4 (и много досок F1), но, похоже, не делают много других
Mailhouse
Ср 23 ноября 2016 г., 4:34
Каковы последствия для настройки часов таким образом?
Такие библиотеки, как Tone и Servo, правильно?
Такие библиотеки, как Tone и Servo, правильно?
Rogerclark
Ср 23 ноября 2016 г., 4:58
Я думаю, что @grumpyoldpizza сказал, что единственным побочным эффектом было увеличение текущего потребления