Вт июл 13, 2021 13:45:43
Вт июл 13, 2021 13:54:17
Сейчас собираетесь играться с энкодером, потом с АЦП/ЦАП, потом еще с чем-то. По-хорошему, если вы действительно пытаетесь сделать из своей платы тестер, стоит итеративно добавлять проверку новых узлов чтобы хотя бы с ними в будущем не ловить сюрпризов.Хотя, конечно, на таймеры стоило бы более активную проверку сделать (в т.ч. на режим энкодера: собираюсь
Теоретически, можно воспользоваться JTAG чтобы напрямую писать значения в регистры периферии, тогда сложность переедет в программу на стороне компа.Чтобы сделать проверку вообще всех компонент, придется нехилую обвязку делать. Да и прошивка МК будет оочень жирной.
Основные электрические параметры проверяются на этапе, когда пластина ещё не разрезана на кристаллы. Она перемещается под зондом с шагом, равным расстоянию между кристаллами, затем зонд
Вт июл 13, 2021 15:06:27
Вт июл 13, 2021 15:59:09
Вт июл 13, 2021 17:06:03
У меня похожая беда с L1 - не срабатывало стирание флеша, решилось вот таким костылем:Но после снятия защиты от записи st-flash может прошить МК только единожды
stm32flash -j /dev/ttyUSB0
sleep 1
stm32flash -k /dev/ttyUSB0
sleep 1
stm32flash -e 0 -w $(frmname).bin /dev/ttyUSB0
Вт июл 13, 2021 17:30:29
Вт июл 13, 2021 21:47:19
make flash
FLASH blink.bin
/usr/bin/st-flash write blink.bin 0x8000000
st-flash 1.6.0
2021-07-13T21:18:20 INFO common.c: Loading device parameters....
2021-07-13T21:18:20 INFO common.c: Device connected is: F3 device, id 0x10036422
2021-07-13T21:18:20 INFO common.c: SRAM size: 0xa000 bytes (40 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 2048 bytes
2021-07-13T21:18:20 INFO common.c: Attempting to write 612 (0x264) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08000000 erased
2021-07-13T21:18:20 INFO common.c: Finished erasing 1 pages of 2048 (0x800) bytes
2021-07-13T21:18:20 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2021-07-13T21:18:20 INFO flash_loader.c: Successfully loaded flash loader in sram
2021-07-13T21:18:24 ERROR flash_loader.c: flash loader run error
2021-07-13T21:18:24 ERROR common.c: stlink_flash_loader_run(0x8000000) failed! == -1
stlink_fwrite_flash() == -1
make: *** [Makefile:137: flash] Error 255
static void gpio_setup(void){
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;
GPIOA->MODER = GPIO_MODER_MODER8_O | GPIO_MODER_MODER6_O;
GPIOA->ODR = 0;
GPIOB->MODER = GPIO_MODER_MODER0_O | GPIO_MODER_MODER1_O;
GPIOB->ODR = 0;
}
for (i = 0; i < 100000; i++) __NOP();
GPIOA->ODR = 0;
GPIOB->ODR = 3;
for (i = 0; i < 100000; i++) __NOP();
GPIOB->ODR = 0;
GPIOA->ODR = (1<<6) | (1<<8);
static volatile uint32_t blink_ctr = 0;
void sys_tick_handler(void){
++blink_ctr;
}
static void systick_setup(uint32_t xms){
static uint32_t curms = 0;
if(curms == xms) return;
SysTick_Config(6000 * xms);
curms = xms;
}
static void gpio_setup(void){
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;
GPIOA->MODER = GPIO_MODER_MODER8_O | GPIO_MODER_MODER6_O;
GPIOA->ODR = 0;
GPIOB->MODER = GPIO_MODER_MODER0_O | GPIO_MODER_MODER1_O;
GPIOB->ODR = 3;
}
int main(void){
gpio_setup();
systick_setup(100);
uint32_t ctr = 0;
while (1){
if(blink_ctr - ctr > 5){
ctr = blink_ctr;
GPIOB->ODR ^= 3;
GPIOA->ODR ^= ((1<<6) | (1<<8));
}
}
}
if(blink_ctr - ctr > 5){
ctr = blink_ctr;
pin_toggle(GPIOB, 3);
pin_toggle(GPIOA, 1<<8|1<<6);
}
#define pin_toggle(gpioport, gpios) do{ \
register uint32_t __port = gpioport->ODR; \
gpioport->BSRR = ((__port & (gpios)) << 16) | (~__port & (gpios));}while(0)
Вт июл 13, 2021 22:01:42
Вт июл 13, 2021 23:55:16
TRUE_INLINE void StartHSE(){
__IO uint32_t StartUpCounter = 0;
RCC->CR = (RCC->CR & ~RCC_CR_PLLON) | RCC_CR_HSEON; // disable PLL to reconfigure, enable HSE
while(!(RCC->CR & RCC_CR_HSERDY) && (++StartUpCounter < 10000));
if(RCC->CR & RCC_CR_HSERDY){
// Enable Prefetch Buffer. Flash 2 wait states for 48..72MHz
FLASH->ACR = (FLASH->ACR & ~(FLASH_ACR_LATENCY)) |
FLASH_ACR_LATENCY_1 | FLASH_ACR_PRFTBE;
// HCLK = SYSCLK (AHB prescaler = 1), PCLK1 = HCLK (APB1 prescaler = 1), PCLK2 = HCLK (APB2 prescaler = 1)
// PLLCLK = HSE * 9 = 72MHz
RCC->CFGR = (RCC->CFGR & ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2 |
RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMUL)
) | RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR_PLLMUL9;
RCC->CR |= RCC_CR_PLLON; // Enable PLL
// Wait till PLL is ready
StartUpCounter = 0;
while(!(RCC->CR & RCC_CR_PLLRDY) && (++StartUpCounter < 1000)){}
// Select PLL as system clock source
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_PLL;
// Wait till PLL is used as system clock source
StartUpCounter = 0;
while(((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) && (++StartUpCounter < 1000)){}
}else{ // HSE fails to start-up
RCC->CIR = 0;
RCC->CR |= RCC_CR_HSION;
// To adjust HSI use HSITRIM and after that wait for HSIRDY
}
}
Ср июл 14, 2021 00:13:28
Ср июл 14, 2021 00:43:37
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks, uint32_t div8)
{
if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = ticks - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
if(!div8) SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;
return (0);
}
Ср июл 14, 2021 01:10:57
Ср июл 14, 2021 02:00:46
Ср июл 14, 2021 06:46:10
Ср июл 14, 2021 09:20:03
Ср июл 14, 2021 09:51:50
Ср июл 14, 2021 10:04:58
Ср июл 14, 2021 10:52:11
Когда последний раз Errata для F072 открывал?
Ср июл 14, 2021 11:14:04
Eddy_Em писал(а):Вот еще жесть: "BSY bit may stay high at the end of a SPI data transfer in slave mode". Хочешь работать в SPI slave? Отрубай SPI после каждой передачи, а как BSY упадет, можешь включать обратно!
Ср июл 14, 2021 11:34:42