Ответы пользователя по тегу ARM
  • Как помигать диодиком на stm32l152 DISCO под Linux?

    AlanDrakes
    @AlanDrakes
    Поставьте хотя бы демо-версию Keil'а. Ограничения в 32kB кода для начала будет болчее чем достаточно.
    Готовые примеры так же можно найти в сети.
    Минимальный - настройка GPIO, и через таймер менять состояние пина.
    Например, вот так:
    int main(void) {
    	RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
    	GPIOA->MODER |= 1;	// GPIOA.0.MODE -> out mode
    	GPIOA->OSPEEDR |= 3;	// GPIOA.0.SPEED -> MAX SPEED
    	while(1) {
    		for (uint32_t i=0;i<1000000;i++) {};		// Пауза
    		GPIOA->ODR ^= 1;	// Toggle GPIOA.0
    	};
    };

    Вот этот код будет мигать пином PA0.
    Ответ написан
  • Как затактировать stm32 от внешнего кварца?

    AlanDrakes
    @AlanDrakes
    Странно. У меня запускался нормально.
    Попробуйте перенести настройку Flash памяти ДО смены основного тактового генератора.
    Помнится, на высокой рабочей частоте данные просто не смогут выбраться.
    В остальном в коде, похоже, всё в порядке.

    Если работаете в отладчике - можете прямо в процессе выполнения идти по инструкциям где-то после:
    RCC->CR |= RCC_CR_PLLON; // Запустить PLL
    И точно увидите, где возникает проблема.

    Кстати, либо можете перенести строки
    RCC->CFGR &= ~RCC_CFGR_SW; // Очистить биты SW0, SW1
    RCC->CFGR |= RCC_CFGR_SW_PLL; // Тактирование с выхода PLL
    while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1); // Ожидание переключения на PLL
    непосредственно после flash->acr
    Ответ написан
    Комментировать