Для начала работы с STM32F103 рекомендуется установить среду разработки STM32CubeIDE. Это бесплатное ПО от STMicroelectronics, которое включает в себя все необходимые инструменты для написания, отладки и прошивки кода. После установки создайте новый проект, выбрав модель STM32F103C8T6 (или другую из семейства F103) в мастере настройки. Это позволит автоматически сгенерировать базовую конфигурацию периферии.
Одной из ключевых особенностей STM32F103 является его тактовая частота до 72 МГц. Для достижения максимальной производительности настройте тактирование через PLL, используя внешний кварцевый резонатор на 8 МГц. В STM32CubeMX это можно сделать на вкладке Clock Configuration, где также доступна визуализация дерева тактирования.
При работе с таймерами учитывайте, что STM32F103 поддерживает до 4 каналов ШИМ на каждый таймер. Например, для генерации ШИМ на TIM2_CH1 настройте таймер через HAL_TIM_PWM_Init(), а затем запустите его с помощью HAL_TIM_PWM_Start(). Убедитесь, что частота ШИМ соответствует требованиям вашего проекта.
Для отладки используйте интерфейс SWD, подключившись через ST-Link или аналогичный программатор. В STM32CubeIDE можно настроить точки останова, просматривать регистры и анализировать состояние периферии в реальном времени. Это особенно полезно при работе с прерываниями и DMA.
Особенности работы с периферией микроконтроллера
Для настройки таймеров используйте регистр TIMx_CR1. Установите бит CEN для запуска счетчика и DIR для выбора направления счета. Например, для таймера TIM2:
- Включите тактирование: RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
- Настройте предделитель: TIM2->PSC = 7199; // Для частоты 10 кГц при 72 МГц
- Задайте период: TIM2->ARR = 1000; // Счет до 1000
- Запустите таймер: TIM2->CR1 |= TIM_CR1_CEN;
При работе с АЦП активируйте калибровку перед началом измерений. Для этого:
- Включите тактирование ADC: RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
- Запустите калибровку: ADC1->CR2 |= ADC_CR2_CAL;
- Дождитесь завершения: while (ADC1->CR2 & ADC_CR2_CAL);
- Установите тактирование: RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
- Настройте режим: GPIOA->CRL &= ~(0xF << 20); GPIOA->CRL |= (0x3 << 20);
- Управляйте состоянием: GPIOA->ODR ^= (1 << 5); // Инверсия состояния
При использовании USART убедитесь, что скорость передачи настроена корректно. Для скорости 9600 бод при 72 МГц:
- Рассчитайте значение делителя: USART1->BRR = 0x1D4C;
- Включите передатчик и приемник: USART1->CR1 |= USART_CR1_TE | USART_CR1_RE;
- Активируйте модуль: USART1->CR1 |= USART_CR1_UE;
Для работы с DMA настройте канал, указав источник, приемник и количество передач. Например, для передачи данных из массива в USART:
- Настройте канал DMA1_Channel4: DMA1_Channel4->CPAR = (uint32_t)&USART1->DR;
- Укажите источник: DMA1_Channel4->CMAR = (uint32_t)buffer;
- Задайте количество данных: DMA1_Channel4->CNDTR = buffer_size;
- Запустите передачу: DMA1_Channel4->CCR |= DMA_CCR_EN;
Настройка периферии: работа с GPIO, UART и SPI
При работе с UART настройте скорость передачи данных через регистр BRR. Для частоты тактирования 72 МГц и скорости 9600 бод значение будет 0x1D4C. Включите передачу и прием, установив биты TE и RE в регистре CR1. Для обработки прерываний настройте регистр CR3, включив бит RXNEIE.
Для SPI настройте режим работы через регистр CR1. Установите биты CPOL и CPHA для выбора режима передачи. Для частоты тактирования 18 МГц и делителя 8 используйте значение 0x3 в поле BR. Включите SPI, установив бит SPE. Для передачи данных используйте регистр DR, а для проверки готовности – флаг TXE в регистре SR.
Отладка и тестирование программ: использование ST-Link и OpenOCD
Для подключения к микроконтроллеру через ST-Link используйте 4-контактный интерфейс: SWDIO, SWCLK, GND и VCC. Убедитесь, что напряжение на VCC соответствует уровню питания целевого устройства (обычно 3,3 В).
Настройка OpenOCD
Установите OpenOCD через пакетный менеджер вашей ОС (например, apt install openocd для Linux). Создайте конфигурационный файл с указанием интерфейса ST-Link и целевого процессора. Пример конфигурации:
source [find interface/stlink.cfg] source [find target/stm32f1x.cfg]
Запустите OpenOCD с указанием конфигурации: openocd -f ваш_файл.cfg. После успешного подключения OpenOCD предоставит доступ к отладке через порт 3333 (GDB) и 4444 (Telnet).
Отладка через GDB
Для отладки используйте GDB с поддержкой ARM. Подключитесь к OpenOCD: target extended-remote :3333. Установите точки останова, например, b main, и запустите программу командой continue. Для анализа состояния регистров используйте info registers.
Для тестирования памяти и периферии применяйте команды чтения/записи через Telnet: telnet localhost 4444. Например, для чтения регистра GPIOA используйте mdw 0x40010808.
При возникновении ошибок проверьте соединение ST-Link, правильность конфигурации OpenOCD и соответствие версии прошивки ST-Link. Обновите прошивку через утилиту ST-Link Utility при необходимости.


























































