Stm32f103c8t6 arm stm32

Part Number : STM32F103C8T6

Function : Medium-density performance line ARM-based 32-bit MCU

Package : LQFP 48 Pin

Manufacturers : STMicroelectronics

Image

 

Description

The STM32F103xx, STM32F103C8T6 medium-density performance line family incorporates the high-performance ARM Cortex-M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses. All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN. The devices operate from a 2.0 to 3.6 V power supply. They are available in both the –40 to +85 °C temperature range and the –40 to +105 °C extended temperature range. A comprehensive set of power-saving mode allows the design of low-power applications.

 

Pinout

Features

Architecture : ARM Cortex-M3
CPU Speed : 72MHz
Program Memory Size : 64KB
RAM Memory Size : 20KB
No. of Pins : 48Pins
MCU Case Style : LQFP
No. of I/O’s : 37I/O’s
Embedded Interface Type : CAN, I2C, SPI, USART, USB
Supply Voltage Min : 2V
Supply Voltage Max : 3.6V
Packaging : Each
Automotive Qualification Standard : –
MSL : MSL 3 -168 hours
Base Number : (ARM Cortex) STM32
Clock Frequency : 72MHz
Controller Family/Series : STM32
Flash Memory Size : 64KB
MPU Core Size : 32bit
Memory Type : Flash
No. of ADC Inputs : 10
No. of Bits : 32bit
No. of PWM Channels : 1
No. of Timers : 4
Number of bits In Timer : 16

 

Ordering Information

Reference Site

http://www.st.com/en/microcontrollers/stm32f103c8.html
Other data sheets within the file : STM32F103C8T7, STM32F103CBT7

 

STM32F103C8T6 Datasheet

 

 

Related articles across the web

Программатор stm32 своими руками.

Самодельная и доступная альтернатива продаваемому программатору от STMicroelectronics. Является выдержкой и компиляцией нескольких статей и схем найденных в интернете. Реализация в минимально возможном форм-факторе.

У любого разработчика встраиваемого софта должен быть программатор для устройств которые он использует. В моём случае микроконтроллеры фирмы STMicroelectronics, а так же Milandr (российские процессоры на ядре ARM).

Покупка данного девайса весьма затратна, особенно если сравнивать с себестоимостью компонентов — печатной платы и радиодеталей.

Решено было сделать программатор самостоятельно. За основу легли схемы отладочных плат для различных МК, в итоге получился полнофункциональный отладочный модуль и не только для stm32, но и для stm8 и даже миландровских чипов (проверено пока только на К1986ВЕ92, но думаю и другие тоже будут шиться и отлаживаться).

Основные функции:

  • программирование и отладка STM32;
  • программирование и отладка STM8;
  • программирование и отладка ARM Миландр.

Интерфейсы программирования:

  • SWD — до 4 МГц;
  • JTAG;
  • SWIM.

Сам программатор можно рассмотреть на фото выше. Провода растянутые по плате это лишь последующие доработки связанные с отсутствием необходимого светодиода (слева) и с необходимостью программировать платы без подачи на них питания (справа).

Схема устройства максимально проста и понятна:

Ядром является контроллер stm32f103, который и используется во всех отладочных платах. На его входах и выходах устройства, я имею ввиду разъем для подключения программируемого микроконтроллера, установлены диоды для защиты от статики, диоды выбраны достаточно маленькие, но легко доступные и без особых сложностей впаиваемыми, даже людьми с ослабленным зрением, сам я впрочем и не жалуюсь со своими единичками на обоих глазах.

В качестве разъема для подключения к компьютеру используется microUSB, выбор пал только лишь из-за его современности по сравнению с его мини братом. У меня же самого на плате стоит именно мини, когда собирал заложенного микро не было в наличии.
Плата выглядит следующим образом:

После сборки и проверки на короткое замыкание подключаем устройство к компьютеру и видим что ничего не происходит, разве что программатор определяется как неизвестное устройство, причина в отсутствии прошивки.

Для обеспечения работы необходимо зашить по в микроконтроллер, для этого нам понадобиться usb-uart переходник, бутлоадер и утилита для прошивки.

Если с утилитой и переходником проблем на возникает, то с загрузчиком все несколько иначе — так как сама прошивка в контроллерах на отладочных платах заблокирована от считывания и вытащить у меня не получилось. Благо живем в современном мире, где есть интернет.

Решение было найдено на одном из многочисленных форумов — бинарник прошивки. Правда была проблема, после прошивки контроллера программатор определялся, но работать не хотел, зато спокойно прошивался через st-link utility, было решено подчистить файл прошивки, удалив все лишнее, оставив только сам загрузчик.

Как можно догадаться все удалось и теперь загрузчик можно взять здесь.

Для заливки используем разъем P1, выводы 3 и 4 которого замыкаем вместе, переводя микроконтроллер в режим загрузки по usart1.

Arduino STM32F103C8T6

Подключаем uart переходники подаем питание на плату программатора, можно через usb разъем.

В утилите выбираем используемый последовательный порт и следуем остальным инструкциям. Этот процесс в картинках описывать нет смысла — все довольно тривиально.

После окончания прошивки отключаем все вспомогательные устройства и подключаем программатор к компьютеру, он должен нормально определиться. Теперь осталось обновить прошивку программатора с помощью st-link utility.

Можно пользоваться и наслаждаться работой собранного собственными руками программатора.

Данный программатор хорошо себя зарекомендовал, на протяжении года пользования. Отлично работал при -40о С в климатической камере, помогая отлаживать одно из разрабатываемых устройств, а так же дважды посетил вместе со мной Камчатку, где отлично себя чувствовал в суровых климатических условиях.

Для желающих собрать аналогичный программатор:

GERBER — st-link.zip

Описание — st-link-document.zip

Прерывания в STM32

В этой статье я планирую поделиться с читателями своими скромными познаниями в области прерываний. Начать следует с того, что же представляют собой прерывания. Прерываниеэто событие как правило связанное с каким-либо блоком периферии микроконтроллера STM32.

STM32 на примере STM32F103C8T6

Событий которые могут породить прерывание может быть множество. Например если речь о таком блоке периферии как UART, то там могут быть такие события: передача завершена, приём завершен, возникла ошибка чётности итд. Использование прерываний позволит нашей программе мгновенно регировать на подобные события. Сам термин прерывание говорит о том, что что-то должно прерваться и в нашем случае прервется выполнение основного кода вашей программы и управление будет передано некоторому другому куску кода который называется обработчиком прерывания. Таких обработчиков достаточно много, ибо периферийных устройств в STM32 предостаточно. Стоит отметить важный момент: В случае возникновения двух разных прерываний от одного блока периферии возникает одно и тоже прерывание. Например если произойдет прерывание по приёму байта через UART и прерывание по завершению передачи через тот же UART, то в обоих случаях будет вызван один и тот же обработчик. Для того чтоб определить какое из возможных прерываний произошло нужно смотреть на флаги состояния. И само собой очищать их перед выходом из прерывания. Когда обработчик прерывания отработает, управление будет передано той самой строчке кода, во время выполнения которой наступило прерывание. То есть основная программа продолжит работать дальше как ни в чем не бывало.

Осциллограф STM32F103 (Отладочная плата на STM32F103C8T6) TFT LCD 2.2′ SPI (ILI9341) Схема Прошивка

Параметр Значение Описание
Package LQFP 64 10x10x1.4 тип корпуса
Marketing Status Active
Core ARM Cortex-M4 тип ядра
Operating Frequency(F) (Processor speed) 72 рабочая частота
FLASH Size (Prog) 512 размер флеш-памяти
Data E2PROM nom (B)
Internal RAM Size 80 размер встроенной оперативной памяти
16-bit timers (IC/OC/PWM) 10×16-bit
32-bit timer (IC/OC/PWM) 1×32-bit
Other timer functions 2xWDG;RTC;SysTick
A/D Converter 4×12-bit аналого-цифровой преобразователь
I/Os (High Current) 53
Display controller
D/A Converter 2×12-bit
Integrated op-amps 4
Serial Interface 1 x CAN;1 x USB;3 x I2C;4 x SPI;5 x USART интерфейсы
Supply Voltage(Vcc) min (V) — max (V) 2 — 3.6 диапазон питания (мин-макс)
Supply Current(Icc) (Lowest power mode) typ ( 2
Supply Current(Icc) (Run mode (per Mhz)) typ 450
Operating Temperature min (°C) — max (°C) -40 — 105

Проект создан с целью объединить знания и наработки в областе DIY и цифровых технологий и помочь в процессе создания собственных устройств. В данный момент проект наход находится в стадии разработки.
Если у Вас есть предложения, замечания или пожелания по развитию проекта — свяжитесь с нами:
  страница проекта в facebook   admin@prototype.org.ua

Сборник сниппетов для STM32F0 в помощь начинающим программистам

Компания STMicroelectromics выпустила набор сниппетов для STM32 (STM32Snippets), которые упрощают написание кода, особенно для начинающих программистов. Сниппеты — это куски кода, отвечающие за выполнение каких-либо элементарных функций, например, обращение к АЦП, портам ввода-вывода, таймеру и т.п. В отличие от библиотеки стандартной периферии, сниппеты работают непосредственно с регистрами, что позволяет создавать максимально эффективный компактный код.

Программирование на уровне регистров позволяет уменьшить требуемый объем памяти, сохранить драгоценные циклы процессора и добиться минимального энергопотребления, но, как правило, требует интенсивного и трудоемкого изучения документации. Готовые примеры кода STM32Snippets облегчают создание эффективных и производительных программ.

STM32Snippets являются дополнением к недавно объявленному программному инструменту STM32Cube™ для генерации переносимого кода инициализации периферии микроконтроллеров. Переносимость здесь достигается благодаря использованию библиотек стандартной периферии. С помощью STM32Snippets и STM32Cube™ разработчики могут выбирать наиболее подходящий им вариант оптимизации: по совместимости или эффективности кода, т.е.

между созданием переносимого кода с помощью STM32Cube™ и высоко оптимизированной реализацией, которую предлагает STM32Snippets. Эта комбинация является уникально экосистемой разработки на рынке и подтверждает звание «лучший выбор», которым разработчики наградили микроконтроллеры STM32.

STM32Snippets будут доступны для всех вариантов микроконтроллеров STM32. Первым выпущен набор примерно из 100 фрагментов кода, охватывающий весь набор периферии микроконтроллеров серии STM32F0 (кроме USB controller1).

STM32F103C8T6 – отладочная плата STM32

Фрагменты можно скачать бесплатно. Они готовы для использования с отладочной платой STM32F072B-DISCO и средами разработки IAR EWARM и Keil MDK-ARM.

Справка из википедии:
Сниппет (англ. snippet — фрагмент, отрывок) в практике программирования — небольшой фрагмент исходного кода или текста, пригодный для повторного использования. Сниппеты не являются заменой процедур, функций или других подобных понятий структурного программирования. Они обычно используются для более лёгкой читаемости кода функций, которые без их использования выглядят слишком перегруженными деталями, или для устранения повторения одного и того же общего участка кода

Набор примеров кода для STM32F0

•••

Наши информационные каналы

Для защиты прошивки можно применять несколько способов:

  • установка битов соответствующих регистров
  • и совсем варварский способ — оторвать ноги JTAG 🙂

Я предпочитаю исключительно первый способ.

Простейший вариант это подключить контроллер и с помощью утилиты ST-Link Utility изменить настройки Option Bytes, установив Read Out Protection в значение Enable.

Всё, контроллер больше не поддаётся ни отладке, ни считыванию прошивки. И самое прекрасное, что при снятии этого флага память программы очищается.

Для автоматизации можно конечно написать скрипт, который будет сразу заливать прошивку и выставлять нужный нам бит, благо утилита имеет консольную версию.

Но всё можно сделать на много проще.

В библиотеке StdPeriph в файле stm32f10x_flash.h имеется определение функции:

Принимающая на вход значение ENABLE или DISABLE, соответственно включить защиту и выключить.

Получается что для защиты нам необходимо только выполнить эту функцию со значением ENABLE. Но нужно ещё разблокировать запись во флэш.

Arduino for STM32

То есть код будет выглядеть следующим образом.

Делаем всё выше сказанное перед (можно после) инициализации всей периферии в процедуре main. Но теперь возникает вопрос — мы будет каждый раз переписывать значение при включении нашего устройства? Нет, для этого необходимо каким-то образом узнать, установлена ли уже защита, на помощь приходит функция из того же файла stm32f10x_flash.h и код уже будет выглядеть следующим образом:

Если же использовать для разработки и прошивки KEIL, то можно просто в настройках проекта установить флаг Execute-only Code и среда всё сделает за вас.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *