Написал простую программу для stm32vl. Суть такая: при нажатии кнопки USER(логическая единица на порт А0) должен мигать светодиод подключенный к порту С9. Вот исходный код:
Раздел: STM32
//Не забываем подключить заголовочный файл с описанием регистров микроконтроллера
#include "stm32f10x.h"
//объявляем функцию программной задержки
void Delay (void);
//сама функция программной задержки
void Delay (void)
{
unsigned long i;
for (i=0; i<2000000; i++);
}
//Наша главная функция
void main(void)
{
//Разрешаем тактирование шины порта С
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
//очистим разряды MODE9 (сбросить биты MODE9_1 и MODE9_0 в нуль)
GPIOC->CRH &= ~GPIO_CRH_MODE9;
//Выставим бит MODE9_1, для настройки вывода на выход с быстродействием 2MHz
GPIOC->CRH |= GPIO_CRH_MODE9_1;
//очистим разряды CNF (настроить как выход общего назначения, симметричный (push-pull))
GPIOC->CRH &= ~GPIO_CRH_CNF9;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Разрешить тактирование GPIOA
//Конфигурирование GPIOA.0
GPIOA->CRL &= ~GPIO_CRL_MODE0; //очистить разряды MODE
GPIOA->CRL &= ~GPIO_CRL_CNF0; //очистить разряды CNF
GPIOA->CRL |= GPIO_CRL_CNF0_0; //дискретный вход, третье состояние
//Наш основной бесконечный цикл
if(GPIOA->IDR & GPIO_IDR_IDR0)
{while(1)
{
//Установка вывода 9 порта С в логическую единицу («зажгли» светодиод)
GPIOC->BSRR = GPIO_BSRR_BS9;
//Добавляем программную задержку, чтобы светодиод светился некоторое время
Delay();
//Сброс состояния вывода 9 порта С в логический ноль
GPIOC->BSRR = GPIO_BSRR_BR9;
//Добавляем снова программную задержку
Delay();
}}; //если на выводе "1"
}
Раздел: STM32