اطلاعیه

Collapse
No announcement yet.

میکرو Stm فقط یکبار پروگرام میشه

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    میکرو Stm فقط یکبار پروگرام میشه

    با سلام
    برای اولین بار یک برنامه چشمک زن ساده با CUBEMX و IAR اماده کردم ( قبلا از MIKROC FOR ARM استفاده میکردم ) ولی وقتی برنامه رو پروگرام میکنم برای بار دوم دیگه پروگرام نمیشه .
    از دو تا پروگرامر مختلف و همچنین با پروگرامر jlink در دو حالت SWD و JTAG امتحان کردم که مشکل حل نشد
    هیچ تداخلی هم بین پایه های مورد استفاده و پایه ها مخصوص پروگرام وجود نداره
    ممنون میشم اگر کمک کنید .
    خطا هم بصورت زیر است
    connecting to cpu via connect under reset failed
    TAB Command : 10 [MENTION=152917]OFF[/MENTION] 0x5
    Faied to connect
    Could not establish a connection to target
    دست هایی که کمک میکنند از دست هایی که دعا میکنند مقدس ترند....کوروش کبیر

    #2
    پاسخ : میکرو Stm فقط یکبار پروگرام میشه

    وقتی پایه BOOT رو به vcc وصل میکنم میشه پروگرام کرد و مثل اینکه بخاطر flash write protection است که نمیشه دوبار پروگرام کرد ُ*.. چجوری میشه تو تنظیمات اولیه cubemx این حالت رو غیر فعال کرد؟
    دست هایی که کمک میکنند از دست هایی که دعا میکنند مقدس ترند....کوروش کبیر

    دیدگاه


      #3
      پاسخ : میکرو Stm فقط یکبار پروگرام میشه

      سلام
      فکر نکنم در تنظیمات اولیه cube قفل فلش فعال باشه اگه میتونی برنامه رو بذار ببینم فایل main رو میگم

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      اما error که میده مربوط به nreset هست پایه ریست رو چک کن ببین وصله و همینطور ببین دائما در یه وضعیت نباشه یعنی نا خواسته دائما pulldown باشه و همینطور برنامت رو چک کن
      امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

      دیدگاه


        #4
        پاسخ : میکرو Stm فقط یکبار پروگرام میشه

         [FONT=Yekan]#include "main.h"[/FONT]#include "stm32f1xx_hal.h"


        TIM_HandleTypeDef htim1;
        TIM_HandleTypeDef htim2;


        UART_HandleTypeDef huart2;


        void SystemClock_Config(void);
        void Error_Handler(void);
        static void MX_GPIO_Init(void);
        static void MX_TIM1_Init(void);
        static void MX_TIM2_Init(void);
        static void MX_USART2_UART_Init(void);




        int main(void)
        {


        HAL_Init();
        SystemClock_Config();
        HAL_FLASH_Unlock();
        HAL_FLASH_OB_Unlock();
        MX_GPIO_Init();
        MX_TIM1_Init();
        MX_TIM2_Init();
        MX_USART2_UART_Init();


        while (1)
        {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
        HAL_Delay(1000);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
        HAL_Delay(1000);

        }


        }


        void SystemClock_Config(void)
        {


        RCC_OscInitTypeDef RCC_OscInitStruct;
        RCC_ClkInitTypeDef RCC_ClkInitStruct;


        RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
        RCC_OscInitStruct.HSEState = RCC_HSE_ON;
        RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
        RCC_OscInitStruct.HSIState = RCC_HSI_ON;
        RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
        RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
        RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
        if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
        {
        Error_Handler();
        }


        RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
        |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
        RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
        RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
        RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
        RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


        if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
        {
        Error_Handler();
        }




        HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
        HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
        HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
        }


        static void MX_TIM1_Init(void)
        {


        TIM_MasterConfigTypeDef sMasterConfig;
        TIM_IC_InitTypeDef sConfigIC;


        htim1.Instance = TIM1;
        htim1.Init.Prescaler = 0;
        htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
        htim1.Init.Period = 0;
        htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
        htim1.Init.RepetitionCounter = 0;
        if (HAL_TIM_IC_Init(&htim1) != HAL_OK)
        {
        Error_Handler();
        }


        sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
        sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
        if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
        {
        Error_Handler();
        }


        sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
        sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
        sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
        sConfigIC.ICFilter = 0;
        if (HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
        {
        Error_Handler();
        }


        }


        static void MX_TIM2_Init(void)
        {


        TIM_MasterConfigTypeDef sMasterConfig;
        TIM_IC_InitTypeDef sConfigIC;


        htim2.Instance = TIM2;
        htim2.Init.Prescaler = 0;
        htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
        htim2.Init.Period = 0;
        htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
        if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
        {
        Error_Handler();
        }


        sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
        sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
        if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
        {
        Error_Handler();
        }


        sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
        sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
        sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
        sConfigIC.ICFilter = 0;
        if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
        {
        Error_Handler();
        }


        }


        static void MX_USART2_UART_Init(void)
        {


        huart2.Instance = USART2;
        huart2.Init.BaudRate = 115200;
        huart2.Init.WordLength = UART_WORDLENGTH_8B;
        huart2.Init.StopBits = UART_STOPBITS_1;
        huart2.Init.Parity = UART_PARITY_NONE;
        huart2.Init.Mode = UART_MODE_TX_RX;
        huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
        huart2.Init.OverSampling = UART_OVERSAMPLING_16;
        if (HAL_UART_Init(&huart2) != HAL_OK)
        {
        Error_Handler();
        }


        }




        static void MX_GPIO_Init(void)
        {


        GPIO_InitTypeDef GPIO_InitStruct;


        /* GPIO Ports Clock Enable */
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
        __HAL_RCC_GPIOB_CLK_ENABLE();


        /*Configure GPIO pin Output Level */
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);


        /*Configure GPIO pin : PB12 */
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


        }


        void Error_Handler(void)
        {


        while(1)
        {
        }
        }


        #ifdef USE_FULL_ASSERT


        void assert_failed(uint8_t* file, uint32_t line)
        {




        }


        #endif




        دلیل: ادغام دو پست برای جلوگیری از اسپم

        با mikroC*بدون مشکل پروگرام میکنه ولی با این برنامه فقط وقتی پروگرام میشه که BOOT0 به به vcc متصل کنم ..

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        خط 27 و 28 که
        HAL_FLASH_Unlock();
        HAL_FLASH_OB_Unlock();
        میشه رو خودم بعدا اضافه کردم که هیچ تاثیری نداشت
        دست هایی که کمک میکنند از دست هایی که دعا میکنند مقدس ترند....کوروش کبیر

        دیدگاه


          #5
          پاسخ : میکرو Stm فقط یکبار پروگرام میشه

          سلام شما از CUBE استفاده میکنی باید حین تنظیم میکرو نحوه دیباگ رو روی SERIAL WIRE قرار بدی، (بهتره رو JTAG 5 پین قرار بدی تا از اون 3 پایه دیگه هم استفاده نکنی) الان برای این میکرو شما میتونی این تنظیم رو برای برنامه اعمال کنی و پایه دکمه ریست رو نگه داری به محض شروع پروگرام دستتو بردار تا میکرو شروع به پروگرام بشه و دیگه از این به بعد بدون نیاز به فشار دادن کلید ریست میکرو رو پروگرام کنی، این موضوع قبلا چند بار در انجمن بحث شده بود.

          دیدگاه

          لطفا صبر کنید...
          X