Акронис
Вторник 07 ноября 2017 г. 12:10
Привет.
Сделайте проект с магниторезистентным датчиком KMA200. (https: // www.nxp.com/docs/en/data-sheet/kma200.PDF)
Правление - STM32F407VET6 Black
Библиотека - Leaflabs Maple (https: // github.com/stevstrong/arduino_stm32/)
SPI не работает !
Сделайте проект с магниторезистентным датчиком KMA200. (https: // www.nxp.com/docs/en/data-sheet/kma200.PDF)
Правление - STM32F407VET6 Black
Библиотека - Leaflabs Maple (https: // github.com/stevstrong/arduino_stm32/)
SPI не работает !
#include
#include
RTClock rt(RTCSEL_LSE);
long int alarmDelay = 5;
void setup() {
// We have just started or woken up from sleep! System clock is set to 72MHz HSE.
delay(1000);
sleepAndWakeUp(STANDBY, &rt, alarmDelay);
}
void loop() { } // This is never run
Стивестронг
Вторник 07 ноября 2017 г. 12:32
Конечно, SPI работает.
Только то, что вы не объявили правильный экземпляр SPI.
По умолчанию SPI3 используется в качестве экземпляра SPI, потому что он является наиболее часто используемым интерфейсом на плате Black F4.
Чтобы использовать SPI1, вы должны объявить свой собственный экземпляр SPI:
Только то, что вы не объявили правильный экземпляр SPI.
По умолчанию SPI3 используется в качестве экземпляра SPI, потому что он является наиболее часто используемым интерфейсом на плате Black F4.
Чтобы использовать SPI1, вы должны объявить свой собственный экземпляр SPI:
P = C * V^2 * F * N
Акронис
Вторник 07 ноября 2017 г. 12:37
ХОРОШО.
Теперь я попробую.
Спасибо !
Теперь я попробую.
Спасибо !
Акронис
Вторник 07 ноября 2017 г. 12:46
Стивен
изменил ли я код на SPI1 ?
изменил ли я код на SPI1 ?
#include
#include
#include
RTClock rt(RTCSEL_LSE); // initialise RTC to use LSE
void alarm_triggered() {}; // no op
void setup() {
//blink the led to say that we are alive :)
pinMode(LED_BUILTIN, OUTPUT);
for(int i=0; i<10; i++) {
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}
//set alarm
rt.attachAlarmInterrupt(&alarm_triggered);
rt.setAlarmTime(rt.getTime()+10); //10 secs away
// standby mode
//https://www.st.com/content/ccc/resource/technical/document/application_note/ff/0a/dc/d2/5e/f5/4b/5a/CD00171691.pdf/files/CD00171691.pdf/jcr:content/translations/en.CD00171691.pdf
PWR_BASE->CR &= ~PWR_CR_LPDS; // clear LPDS
PWR_BASE->CR |= PWR_CR_PDDS; // set PDDS
PWR_BASE->CR |= PWR_CR_CWUF; //clear WUF
PWR_BASE->CR |= PWR_CSR_EWUP; //enable wakeup pin
SCB_BASE->SCR |= SCB_SCR_SLEEPDEEP; //set DEEPSLEEP
// goto standby mode / sleep()
asm("wfi");
//once wake up reboot/reset
nvic_sys_reset();
}
void loop() {
//this won't run, there is a ghost if this does run lol
}
ZMEMW16
Вторник 07 ноября 2017 г. 13:29
Хорошо, это станет запутанным, это был первый раз, когда я попытался описать это.
Глядя на схему, PB3, PB4, PB5 помечены вне кадра CPU как SPI1_CLK, SPI1_MISO, SPI1_MOSI
Внутри рамы и внутри скобок на этикетке e.глин.
Глядя на схему, PB3, PB4, PB5 помечены вне кадра CPU как SPI1_CLK, SPI1_MISO, SPI1_MOSI
Внутри рамы и внутри скобок на этикетке e.глин.
pinMode(PA0, INPUT_ANALOG);
Акронис
Вторник 07 ноября 2017 г. 13:34
Привет, Стивен.
Как пережить SPI1 ?
Не могли бы вы сказать мне код, пожалуйста
Как пережить SPI1 ?
Не могли бы вы сказать мне код, пожалуйста
Стивестронг
Вторник 07 ноября 2017 г. 13:44
Я предлагаю использовать:
PWR_BASE->CR |= PWR_CR_PDDS | PWR_CR_CWUF;// set PDDS, clear WUF
Акронис
Вторник 07 ноября 2017 г. 14:20
Стивен, я в замешательстве (
Что я делаю не так ?
Мне нужно сделать это на SPI1 .
Redid Code
Что я делаю не так ?
Мне нужно сделать это на SPI1 .
Redid Code
void enterSleepMode(){
asm(" wfi");
}
ZMEMW16
Вторник 07 ноября 2017 г. 16:49
B2/B3/B4 может быть одним из 'SPI1 A5-A7 Rememance'И (более правильно для меня) все еще помечен SPI1 или как'SPI3 B2-B4', а затем переименован (по крайней мере, для меня неправильно) как spi1
Под родным я имею в виду, что это не подчиняется afio_remap.
Я думаю, вам вполне может понадобиться повторная карта/отключить выводы отладки.
Если бы я использовал Cubemx для этого, в соответствии с их определенной нативной функцией (левая мышиная меню) функции PIN -контакта путем их инициализации выводов в виде переизданного SPI1 или как SPI3 (нативно) и пометить их как SPI1 в имени пользователя PIN -кода ( щелкните правой кнопкой мыши, выпадайте).
Вариант Remap для меня кажется способом, чтобы соответствовать названию PIN -штифта процессора на плату в соответствии с схемой.
REMAP SPI был выполнен ранее, поиск сайта с использованием >afio_remap spi<
ViewTopic.PHP?f = 3&t = 2672&P = 35479&hilit = ... SPI#P35479
Даже не думай о i2c1 & I2c2
это все немного загадки Один из способов ориентирована на доску, другой, ориентированный на процессор.
Я столкнулся с этим, когда пытался собрать для этого файл Cubemx, отсюда и мой более ранний, чтобы получить запутанную комментарий.
Стивен
Под родным я имею в виду, что это не подчиняется afio_remap.
Я думаю, вам вполне может понадобиться повторная карта/отключить выводы отладки.
Если бы я использовал Cubemx для этого, в соответствии с их определенной нативной функцией (левая мышиная меню) функции PIN -контакта путем их инициализации выводов в виде переизданного SPI1 или как SPI3 (нативно) и пометить их как SPI1 в имени пользователя PIN -кода ( щелкните правой кнопкой мыши, выпадайте).
Вариант Remap для меня кажется способом, чтобы соответствовать названию PIN -штифта процессора на плату в соответствии с схемой.
REMAP SPI был выполнен ранее, поиск сайта с использованием >afio_remap spi<
ViewTopic.PHP?f = 3&t = 2672&P = 35479&hilit = ... SPI#P35479
Даже не думай о i2c1 & I2c2
это все немного загадки Один из способов ориентирована на доску, другой, ориентированный на процессор.
Я столкнулся с этим, когда пытался собрать для этого файл Cubemx, отсюда и мой более ранний, чтобы получить запутанную комментарий.
Стивен
Стивестронг
Вторник 07 ноября 2017 г. 22:22
Ну, я только что попробовал этот пример с моим текущим репо:
asm(" wfi");
Акронис
Ср. 8 ноября 2017 г. 12:15
Дорогие друзья !
Спасибо всем за вашу помощь в моем вопросе !
Особое спасибо, Стивестронг !
Ваш код работает нормально !!!
Все вы правильно написали мне. (((
Я не обращал внимания, проблема была в проводе, соединяющем CS микроконтроллера, и датчик был плохой (китайское качество), и не было контакта.
Изменил проволоку, и теперь происходит управление датчиком, но ответа нет из -за слишком высокой скорости SPI.
Мне нужно настроить STM32F407 на частоте 128 МГц .
Расскажите, пожалуйста, как это правильно делать ?
Можно ли это сделать в настройке () ?
Спасибо всем за вашу помощь в моем вопросе !
Особое спасибо, Стивестронг !
Ваш код работает нормально !!!
Все вы правильно написали мне. (((
Я не обращал внимания, проблема была в проводе, соединяющем CS микроконтроллера, и датчик был плохой (китайское качество), и не было контакта.
Изменил проволоку, и теперь происходит управление датчиком, но ответа нет из -за слишком высокой скорости SPI.
Мне нужно настроить STM32F407 на частоте 128 МГц .
Расскажите, пожалуйста, как это правильно делать ?
Можно ли это сделать в настройке () ?
Стивестронг
Ср. 8 ноября 2017 г. 12:35
Вы действительно уверены, что 1.3125 МГц или 0.65625 МГц недостаточно хорошо?
Если вы установите процессор на 128 МГц, USB не будет работать.
Если вы хотите сохранить сериал USB, то - это решение 120 МГц, где часы SPI будут 0.9375 МГц.
Для этого вы можете попробовать использовать в настройке:
Если вы установите процессор на 128 МГц, USB не будет работать.
Если вы хотите сохранить сериал USB, то - это решение 120 МГц, где часы SPI будут 0.9375 МГц.
Для этого вы можете попробовать использовать в настройке:
typedef void (*pFunction)(void);
pFunction JumpToApplication;
uint32_t JumpAddress;
HAL_RCC_DeInit();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
/**
* Step: Disable all interrupts
*/
__disable_irq();
/* ARM Cortex-M Programming Guide to Memory Barrier Instructions.*/
__DSB();
__HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();
/* Remap is bot visible at once. Execute some unrelated command! */
__DSB();
__ISB();
JumpToApplication = (void (*)(void)) (*((uint32_t *)(0x1FFF0000 + 4)));
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) 0x1FFF0000);
JumpToApplication();
Акронис
Ср. 8 ноября 2017 г. 12:41
Стивен, и как сделать 0.65625 МГц ?
Стивестронг
Ср. 8 ноября 2017 г. 13:04
#include
void RCC_DeInit()
{
/* Set HSION bit */
RCC->CR |= (RCC_CR_HSION | RCC_CR_HSITRIM_4);
/* Reset CFGR register */
RCC->CFGR = 0;
/* Reset HSEON, CSSON, PLLON, PLLI2S */
RCC->CR &= ~(RCC_CR_HSEON | RCC_CR_CSSON | RCC_CR_PLLON| RCC_CR_PLLI2SON);
/* Reset PLLCFGR register */
RCC->PLLCFGR = 0;
RCC->PLLCFGR = (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7 | RCC_PLLCFGR_PLLQ_2);
/* Reset PLLI2SCFGR register */
RCC->PLLI2SCFGR = 0;
RCC->PLLI2SCFGR = (RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SR_1);
/* Reset HSEBYP bit */
RCC->CR &= ~(RCC_CR_HSEBYP);
/* Disable all interrupts */
RCC->CIR = 0;
}
void JumpToBootloader(void) __attribute__((optimize("-O0")));
void JumpToBootloader(void)
{
void (*SysMemBootJump)(void);
/**
* Step: Set system memory address.
*
* For STM32F407, system memory is on 0x1FFF 0000
* For other families, check AN2606 document table 110 with descriptions of memory addresses
*/
volatile register uint32_t addr = 0x1FFF0000;
/**
* Step: Disable RCC, set it to default (after reset) settings
* Internal clock, no PLL, etc.
*/
RCC_DeInit();
/**
* Step: Disable systick timer and reset it to default values
*/
SYSTICK->CTRL = 0;
SYSTICK->LOAD = 0;
SYSTICK->VAL = 0;
/**
* Step: Disable all interrupts
*/
noInterrupts();
//delay(10000);
/**
* Step: Remap system memory to address 0x0000 0000 in address space
* For each family registers may be different.
* Check reference manual for each family.
*
* For STM32F4xx, MEMRMP register in SYSCFG is used (bits[1:0])
* For STM32F0xx, CFGR1 register in SYSCFG is used (bits[1:0])
* For others, check family reference manual
*/
SYSCFG->MEMRMP = 0x01;
/**
* Step: Set jump memory location for system memory
* Use address with 4 bytes offset which specifies jump location where program starts
*/
SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
/**
* Step: Set main stack pointer.
* This step must be done last otherwise local variables in this function
* don't have proper value since stack pointer is located on different position
*
* Set direct address location which specifies stack pointer in SRAM location
*/
asm volatile ("mov r3, %0\nldr r3, [r3, #0]\nMSR msp, r3\n" : : "r" (addr) : "r3", "sp");
/**
* Step: Actually call our function to jump to set location
* This will start system memory execution
*/
SysMemBootJump();
/**
* Step: Connect USB<->UART converter to dedicated USART pins and test
* and test with bootloader works with STM32 Flash Loader Demonstrator software
*/
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(3000);
Serial.println("This is a test how to jump to the system bootloader without setting BOOT0 pin to 1.\n");
Serial.println("Type any key to jump to ROM bootloader...\n");
// wait for user input
//while (!Serial.available()) ;
// read all serial input data
//while (Serial.available()) Serial.read();
//Serial.println("The system will now jump to ROM bootloader...");
//delay(100); // let time for serial to output message
// jump to bootloader
JumpToBootloader();
}
void loop() {
// put your main code here, to run repeatedly:
}
Акронис
Ср. 8 ноября 2017 г. 13:07
Теперь ясно.
А потом я подумал, что на самом деле 1 000 кГц.
Еще раз спасибо !!!
А потом я подумал, что на самом деле 1 000 кГц.
Еще раз спасибо !!!