logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

stm32f407vgt6 - Program nie startuje bez użycia st link

demoh 11 Lip 2014 21:57 1377 6
REKLAMA
  • #1 13788361
    demoh
    Poziom 19  
    Posty: 448
    Pomógł: 5
    Ocena: 11
    Zrobiłem sobie płytkę z procesorem stm32f407vgt6 i wszystko było by pięknie ale mam mały problem. Mianowicie jak włączę zasilanie płytki to program nie startuje. Jeśli podłącze st linka i wgram wsad to program startuje bez problemu. Jako środowiska używam CooCox IDE.

    W załączniku schemat płytki.

    Pewnie to jakieś głupie przeoczenie z mojej strony bądź niezrozumienie jakiegoś tematu.

    Z góry dziękuje za pomoc.
    Załączniki:
    • stm32f407vgt6 - Program nie startuje bez użycia st link cpu.png (96.11 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 13788412
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 13788438
    demoh
    Poziom 19  
    Posty: 448
    Pomógł: 5
    Ocena: 11
    W załączniku dodaje jeszcze schemat części z zasilaniem.

    Mógłbyś trochę wyjaśnić ten temat z POR? To moja pierwsza projektowana płytka z ARMem.
    Załączniki:
    • stm32f407vgt6 - Program nie startuje bez użycia st link power.png (31.41 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 13788611
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 13794495
    demoh
    Poziom 19  
    Posty: 448
    Pomógł: 5
    Ocena: 11
    Ściągam wejście NRST do GND i nic się nie dzieje. Jak uruchamiam przez programator to dalej jest ok. Jak ściągnę NRST do GND na uruchomionym programie to się resetuje układ ale program się nie startuje.

    Z peryferii używam tylko 2 portów wyjściowych. Nie załączam niczego innego.
  • REKLAMA
  • #7 13797270
    demoh
    Poziom 19  
    Posty: 448
    Pomógł: 5
    Ocena: 11
    Załączam pliki startowe. Może coś w nich jest źle?

    entry.s
    .syntax unified
    .thumb
    
    
    .global  vectors
    .global  defaultHandler
    
    
    .section .isr_vector, "a"
    
    // Lista wektorow przerywan
    vectors:
    	.word _end_stack
    	.word resetHandler
    	.word NMI_Handler
    	.word HardFault_Handler
    	.word MemManage_Handler
    	.word BusFault_Handler
    	.word UsageFault_Handler
    	.word 0
    	.word 0
    	.word 0
    	.word 0
    	.word SVC_Handler
    	.word DebugMon_Handler
    	.word 0
    	.word PendSV_Handler
    	.word SysTick_Handler
    
    	.word WWDG_IRQHandler
    	.word PVD_IRQHandler
    	.word TAMP_STAMP_IRQHandler
    	.word RTC_WKUP_IRQHandler
    	.word FLASH_IRQHandler
    	.word RCC_IRQHandler
    	.word EXTI0_IRQHandler
    	.word EXTI1_IRQHandler
    	.word EXTI2_IRQHandler
    	.word EXTI3_IRQHandler
    	.word EXTI4_IRQHandler
    	.word DMA1_Stream0_IRQHandler
    	.word DMA1_Stream1_IRQHandler
    	.word DMA1_Stream2_IRQHandler
    	.word DMA1_Stream3_IRQHandler
    	.word DMA1_Stream4_IRQHandler
    	.word DMA1_Stream5_IRQHandler
    	.word DMA1_Stream6_IRQHandler
    	.word ADC_IRQHandler
    	.word CAN1_TX_IRQHandler
    	.word CAN1_RX0_IRQHandler
    	.word CAN1_RX1_IRQHandler
    	.word CAN1_SCE_IRQHandler
    	.word EXTI9_5_IRQHandler
    	.word TIM1_BRK_TIM9_IRQHandler
    	.word TIM1_UP_TIM10_IRQHandler
    	.word TIM1_TRG_COM_TIM11_IRQHandler
    	.word TIM1_CC_IRQHandler
    	.word TIM2_IRQHandler
    	.word TIM3_IRQHandler
    	.word TIM4_IRQHandler
    	.word I2C1_EV_IRQHandler
    	.word I2C1_ER_IRQHandler
    	.word I2C2_EV_IRQHandler
    	.word I2C2_ER_IRQHandler
    	.word SPI1_IRQHandler
    	.word SPI2_IRQHandler
    	.word USART1_IRQHandler
    	.word USART2_IRQHandler
    	.word USART3_IRQHandler
    	.word EXTI15_10_IRQHandler
    	.word RTC_Alarm_IRQHandler
    	.word OTG_FS_WKUP_IRQHandler
    	.word TIM8_BRK_TIM12_IRQHandler
    	.word TIM8_UP_TIM13_IRQHandler
    	.word TIM8_TRG_COM_TIM14_IRQHandler
    	.word TIM8_CC_IRQHandler
    	.word DMA1_Stream7_IRQHandler
    	.word FSMC_IRQHandler
    	.word SDIO_IRQHandler
    	.word TIM5_IRQHandler
    	.word SPI3_IRQHandler
    	.word UART4_IRQHandler
    	.word UART5_IRQHandler
    	.word TIM6_DAC_IRQHandler
    	.word TIM7_IRQHandler
    	.word DMA2_Stream0_IRQHandler
    	.word DMA2_Stream1_IRQHandler
    	.word DMA2_Stream2_IRQHandler
    	.word DMA2_Stream3_IRQHandler
    	.word DMA2_Stream4_IRQHandler
    	.word ETH_IRQHandler
    	.word ETH_WKUP_IRQHandler
    	.word CAN2_TX_IRQHandler
    	.word CAN2_RX0_IRQHandler
    	.word CAN2_RX1_IRQHandler
    	.word CAN2_SCE_IRQHandler
    	.word OTG_FS_IRQHandler
    	.word DMA2_Stream5_IRQHandler
    	.word DMA2_Stream6_IRQHandler
    	.word DMA2_Stream7_IRQHandler
    	.word USART6_IRQHandler
    	.word I2C3_EV_IRQHandler
    	.word I2C3_ER_IRQHandler
    	.word OTG_HS_EP1_OUT_IRQHandler
    	.word OTG_HS_EP1_IN_IRQHandler
    	.word OTG_HS_WKUP_IRQHandler
    	.word OTG_HS_IRQHandler
    	.word DCMI_IRQHandler
    	.word CRYP_IRQHandler
    	.word HASH_RNG_IRQHandler
    	.word FPU_IRQHandler
    
    	.weak NMI_Handler
    	.thumb_set NMI_Handler, defaultHandler
    
    	.weak HardFault_Handler
    	.thumb_set HardFault_Handler, defaultHandler
    
    	.weak MemManage_Handler
    	.thumb_set MemManage_Handler, defaultHandler
    
    	.weak BusFault_Handler
    	.thumb_set BusFault_Handler, defaultHandler
    
    	.weak UsageFault_Handler
    	.thumb_set UsageFault_Handler, defaultHandler
    
    	.weak SVC_Handler
    	.thumb_set SVC_Handler, defaultHandler
    
    	.weak DebugMon_Handler
    	.thumb_set DebugMon_Handler, defaultHandler
    
    	.weak PendSV_Handler
    	.thumb_set PendSV_Handler, defaultHandler
    
    	.weak SysTick_Handler
    	.thumb_set SysTick_Handler, defaultHandler
    
    	.weak WWDG_IRQHandler
    	.thumb_set WWDG_IRQHandler, defaultHandler
    
    	.weak PVD_IRQHandler
    	.thumb_set PVD_IRQHandler, defaultHandler
    
    	.weak TAMP_STAMP_IRQHandler
    	.thumb_set TAMP_STAMP_IRQHandler, defaultHandler
    
    	.weak RTC_WKUP_IRQHandler
    	.thumb_set RTC_WKUP_IRQHandler, defaultHandler
    
    	.weak FLASH_IRQHandler
    	.thumb_set FLASH_IRQHandler, defaultHandler
    
    	.weak RCC_IRQHandler
    	.thumb_set RCC_IRQHandler, defaultHandler
    
    	.weak EXTI0_IRQHandler
    	.thumb_set EXTI0_IRQHandler, defaultHandler
    
    	.weak EXTI1_IRQHandler
    	.thumb_set EXTI1_IRQHandler, defaultHandler
    
    	.weak EXTI2_IRQHandler
    	.thumb_set EXTI2_IRQHandler, defaultHandler
    
    	.weak EXTI3_IRQHandler
    	.thumb_set EXTI3_IRQHandler, defaultHandler
    
    	.weak EXTI4_IRQHandler
    	.thumb_set EXTI4_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream0_IRQHandler
    	.thumb_set DMA1_Stream0_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream1_IRQHandler
    	.thumb_set DMA1_Stream1_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream2_IRQHandler
    	.thumb_set DMA1_Stream2_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream3_IRQHandler
    	.thumb_set DMA1_Stream3_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream4_IRQHandler
    	.thumb_set DMA1_Stream4_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream5_IRQHandler
    	.thumb_set DMA1_Stream5_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream6_IRQHandler
    	.thumb_set DMA1_Stream6_IRQHandler, defaultHandler
    
    	.weak ADC_IRQHandler
    	.thumb_set ADC_IRQHandler, defaultHandler
    
    	.weak CAN1_TX_IRQHandler
    	.thumb_set CAN1_TX_IRQHandler, defaultHandler
    
    	.weak CAN1_RX0_IRQHandler
    	.thumb_set CAN1_RX0_IRQHandler, defaultHandler
    
    	.weak CAN1_RX1_IRQHandler
    	.thumb_set CAN1_RX1_IRQHandler, defaultHandler
    
    	.weak CAN1_SCE_IRQHandler
    	.thumb_set CAN1_SCE_IRQHandler, defaultHandler
    
    	.weak EXTI9_5_IRQHandler
    	.thumb_set EXTI9_5_IRQHandler, defaultHandler
    
    	.weak TIM1_BRK_TIM9_IRQHandler
    	.thumb_set TIM1_BRK_TIM9_IRQHandler, defaultHandler
    
    	.weak TIM1_UP_TIM10_IRQHandler
    	.thumb_set TIM1_UP_TIM10_IRQHandler, defaultHandler
    
    	.weak TIM1_TRG_COM_TIM11_IRQHandler
    	.thumb_set TIM1_TRG_COM_TIM11_IRQHandler, defaultHandler
    
    	.weak TIM1_CC_IRQHandler
    	.thumb_set TIM1_CC_IRQHandler, defaultHandler
    
    	.weak TIM2_IRQHandler
    	.thumb_set TIM2_IRQHandler, defaultHandler
    
    	.weak TIM3_IRQHandler
    	.thumb_set TIM3_IRQHandler, defaultHandler
    
    	.weak TIM4_IRQHandler
    	.thumb_set TIM4_IRQHandler, defaultHandler
    
    	.weak I2C1_EV_IRQHandler
    	.thumb_set I2C1_EV_IRQHandler, defaultHandler
    
    	.weak I2C1_ER_IRQHandler
    	.thumb_set I2C1_ER_IRQHandler, defaultHandler
    
    	.weak I2C2_EV_IRQHandler
    	.thumb_set I2C2_EV_IRQHandler, defaultHandler
    
    	.weak I2C2_ER_IRQHandler
    	.thumb_set I2C2_ER_IRQHandler, defaultHandler
    
    	.weak SPI1_IRQHandler
    	.thumb_set SPI1_IRQHandler, defaultHandler
    
    	.weak SPI2_IRQHandler
    	.thumb_set SPI2_IRQHandler, defaultHandler
    
    	.weak USART1_IRQHandler
    	.thumb_set USART1_IRQHandler, defaultHandler
    
    	.weak USART2_IRQHandler
    	.thumb_set USART2_IRQHandler, defaultHandler
    
    	.weak USART3_IRQHandler
    	.thumb_set USART3_IRQHandler, defaultHandler
    
    	.weak EXTI15_10_IRQHandler
    	.thumb_set EXTI15_10_IRQHandler, defaultHandler
    
    	.weak RTC_Alarm_IRQHandler
    	.thumb_set RTC_Alarm_IRQHandler, defaultHandler
    
    	.weak OTG_FS_WKUP_IRQHandler
    	.thumb_set OTG_FS_WKUP_IRQHandler, defaultHandler
    
    	.weak TIM8_BRK_TIM12_IRQHandler
    	.thumb_set TIM8_BRK_TIM12_IRQHandler, defaultHandler
    
    	.weak TIM8_UP_TIM13_IRQHandler
    	.thumb_set TIM8_UP_TIM13_IRQHandler, defaultHandler
    
    	.weak TIM8_TRG_COM_TIM14_IRQHandler
    	.thumb_set TIM8_TRG_COM_TIM14_IRQHandler, defaultHandler
    
    	.weak TIM8_CC_IRQHandler
    	.thumb_set TIM8_CC_IRQHandler, defaultHandler
    
    	.weak DMA1_Stream7_IRQHandler
    	.thumb_set DMA1_Stream7_IRQHandler, defaultHandler
    
    	.weak FSMC_IRQHandler
    	.thumb_set FSMC_IRQHandler, defaultHandler
    
    	.weak SDIO_IRQHandler
    	.thumb_set SDIO_IRQHandler, defaultHandler
    
    	.weak TIM5_IRQHandler
    	.thumb_set TIM5_IRQHandler, defaultHandler
    
    	.weak SPI3_IRQHandler
    	.thumb_set SPI3_IRQHandler, defaultHandler
    
    	.weak UART4_IRQHandler
    	.thumb_set UART4_IRQHandler, defaultHandler
    
    	.weak UART5_IRQHandler
    	.thumb_set UART5_IRQHandler, defaultHandler
    
    	.weak TIM6_DAC_IRQHandler
    	.thumb_set TIM6_DAC_IRQHandler, defaultHandler
    
    	.weak TIM7_IRQHandler
    	.thumb_set TIM7_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream0_IRQHandler
    	.thumb_set DMA2_Stream0_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream1_IRQHandler
    	.thumb_set DMA2_Stream1_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream2_IRQHandler
    	.thumb_set DMA2_Stream2_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream3_IRQHandler
    	.thumb_set DMA2_Stream3_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream4_IRQHandler
    	.thumb_set DMA2_Stream4_IRQHandler, defaultHandler
    
    	.weak ETH_IRQHandler
    	.thumb_set ETH_IRQHandler, defaultHandler
    
    	.weak ETH_WKUP_IRQHandler
    	.thumb_set ETH_WKUP_IRQHandler, defaultHandler
    
    	.weak CAN2_TX_IRQHandler
    	.thumb_set CAN2_TX_IRQHandler, defaultHandler
    
    	.weak CAN2_RX0_IRQHandler
    	.thumb_set CAN2_RX0_IRQHandler, defaultHandler
    
    	.weak CAN2_RX1_IRQHandler
    	.thumb_set CAN2_RX1_IRQHandler, defaultHandler
    
    	.weak CAN2_SCE_IRQHandler
    	.thumb_set CAN2_SCE_IRQHandler, defaultHandler
    
    	.weak OTG_FS_IRQHandler
    	.thumb_set OTG_FS_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream5_IRQHandler
    	.thumb_set DMA2_Stream5_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream6_IRQHandler
    	.thumb_set DMA2_Stream6_IRQHandler, defaultHandler
    
    	.weak DMA2_Stream7_IRQHandler
    	.thumb_set DMA2_Stream7_IRQHandler, defaultHandler
    
    	.weak USART6_IRQHandler
    	.thumb_set USART6_IRQHandler, defaultHandler
    
    	.weak I2C3_EV_IRQHandler
    	.thumb_set I2C3_EV_IRQHandler, defaultHandler
    
    	.weak I2C3_ER_IRQHandler
    	.thumb_set I2C3_ER_IRQHandler, defaultHandler
    
    	.weak OTG_HS_EP1_OUT_IRQHandler
    	.thumb_set OTG_HS_EP1_OUT_IRQHandler, defaultHandler
    
    	.weak OTG_HS_EP1_IN_IRQHandler
    	.thumb_set OTG_HS_EP1_IN_IRQHandler, defaultHandler
    
    	.weak OTG_HS_WKUP_IRQHandler
    	.thumb_set OTG_HS_WKUP_IRQHandler, defaultHandler
    
    	.weak OTG_HS_IRQHandler
    	.thumb_set OTG_HS_IRQHandler, defaultHandler
    
    	.weak DCMI_IRQHandler
    	.thumb_set DCMI_IRQHandler, defaultHandler
    
    	.weak CRYP_IRQHandler
    	.thumb_set CRYP_IRQHandler, defaultHandler
    
    	.weak HASH_RNG_IRQHandler
    	.thumb_set HASH_RNG_IRQHandler, defaultHandler
    
    	.weak FPU_IRQHandler
    	.thumb_set FPU_IRQHandler, defaultHandler
    
    
    .section .text.resetHandler, "ax"
    
    // Ustawiamy stos
    resetHandler:
    	ldr r0, =_end_stack
    	msr PSP, r0
    
    // Sprawdzamy ile bajtow skopiowac do sekcji data w ram
    copyData:
    	ldr r1, =_start_data
    	ldr r2, =_end_text
    	ldr r3, =_end_data
    	subs r3, r3, r1
    	beq zeroBSS
    
    // Kopiujemy dane z flash do sekcji data w ram
    copyDataLoop:
    	ldrb r4, [r2], #1
    	strb r4, [r1], #1
    	subs r3, r3, #1
    	bgt copyDataLoop
    
    // Sprawdzamy ile bajtow wyzerowac w sekcji bss w ram
    zeroBSS:
    	ldr r1, =_start_bss
    	ldr r3, =_end_bss
    	subs r3, r3, r1
    	beq callStart
    	mov r2, #0
    
    // Zerujemy sekcje bss w ram
    zeroBSSLoop:
    	strb r2, [r1], #1
    	subs r3, r3, #1
    	bgt zeroBSSLoop
    
    // Wywolujemy funkcje odpowiedzialna za ustawienie zegara i peryferiow
    callStart:
    	mov r0, #0
    	bl start
    
    // Nieskonczona petla zabezpieczajaca po wyjsci z glownego programu
    infiniteLoop:
    	b .
    
    
    .section  .text.DefaultHandler, "ax"
    
    // Nieskonczona petla obslugujaca uruchomione a nie podpiete przerywania
    defaultHandler:
    	b .
    
    
    
    


    start.c
    #include "start.h"
    #include "type.h"
    #include "main.h"
    #include "uc.h"
    
    
    void start()
    {
    	SCB->CPACR |= ((3ul << (10 * 2)) | (3ul << (11 * 2))); // Wlaczenie FPU
    
    	RCC->CR |= 0x00000001; // Reset ustawien RCC
    	RCC->CFGR = 0x00000000; // Reset CFGR
    	RCC->CR &= 0xFEF6FFFF; // Reset bitow HSEON, CSSON, PLLON
    	RCC->PLLCFGR = 0x24003010; // Reset PLLCFGR
    	RCC->CR &= 0xFFFBFFFF; // Reset bitu HSEBYP
    	RCC->CIR = 0x00000000; // Wylaczamy przerywania
    
    	volatile u32 HSEStartCounter = 0;
    	volatile u32 HSEStatus = 0;
    
    	RCC->CR |= RCC_CR_HSEON; // Wlaczamy HSE
    
    	// Czekamy az HSE jest gotowy badz przekroczylismy ilosc prob
    	do
    	{
    		HSEStatus = (RCC->CR & RCC_CR_HSERDY);
    		HSEStartCounter++;
    	}
    	while((HSEStatus == 0) && (HSEStartCounter < 32768));
    
    	// Sprawdzamy czy HSE jest gotowy
    	if((RCC->CR & RCC_CR_HSERDY) != 0)
    	{
    		HSEStatus = 1;
    	}
    	else
    	{
    		HSEStatus = 0;
    	}
    
    	if(HSEStatus == 1)
    	{
    		// Wlaczenie zasilania kwarca
    		RCC->APB1ENR |= RCC_APB1ENR_PWREN;
    		PWR->CR |= PWR_CR_VOS;
    
    		// Ustawiamy dzielniki czestotliwosci
    		RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
    		RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
    		RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
    
    		RCC->PLLCFGR = (8ul | (336ul << 6) | (((2ul >> 1) - 1) << 16) | (RCC_PLLCFGR_PLLSRC_HSE) | (7ul << 24)); // Ustawiamy parametry glownej petli PLL
    		RCC->CR |= RCC_CR_PLLON; // Wlaczamy glowna petle PLL
    
    		while((RCC->CR & RCC_CR_PLLRDY) == 0){} // Czekamy az glowna petla PLL jest gotowa
    
    		FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; // Ustawiamy paramatry pracy pamieci FLASH
    
    		// Zmieniamy zrodlo taktowania na PLL
    		RCC->CFGR &= ~(RCC_CFGR_SW);
    		RCC->CFGR |= RCC_CFGR_SW_PLL;
    
    		while((RCC->CFGR & RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL){} // Czekamy az zrodlo taktowania przelaczy sie na PLL
    	}
    	else
    	{
    		return; // Wychodzimy jesli start zewnetrznego zegara sie nie powiodl
    	}
    
    	main();
    }
    

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik napotkał problem z uruchomieniem programu na płytce z procesorem STM32F407VGT6, który działa poprawnie tylko po wgraniu wsadu za pomocą programatora ST-Link. W odpowiedziach zasugerowano sprawdzenie kondensatora C21 oraz stabilności zasilania, a także omówiono kwestie związane z resetem Power-On Reset (POR) i konfiguracją BOD. Użytkownik próbował podłączyć dodatkowy przełącznik między NRST a GND, ale problem nadal występował. Zwrócono uwagę na możliwość błędów w konfiguracji zegara lub I/O, które mogą powodować, że program nie startuje. Użytkownik załączył pliki startowe, co może wskazywać na potencjalne błędy w kodzie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA