Пишу драйвера для stm32f10x и stm32f0xx
02.10.2020, 22:01
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Пишу драйвера для stm32f10x и stm32f0xx
Все привет. Давненько не появлялся.
Кто меня помнит, теперь живу в Голландии, работаю на Canon.
Итак, начал писать альтернативные драйвера под ST МК.
Основная идея - "все в одном". Ставим, включаем, работает.
На данный момент имеется:
stm32f10x (тестировалось на STM32F103VC и STM32F103RBT6)
ADC, BKP, CRC, DAC, DMA, DELAY, EXTI, GPIO, I2C, RTC, SPI, TIM и UART.
CRC, DAC, I2C, SPI и UART используют DMA.
Если канал оказывается занят, передача обрывается с ошибкой.
Добавленна поддержка FreeRTOS. Отложенные прерывания, заморозка
функции на время работы переферии.
В stm32f0xx используется DMA, но если канал занят, использует прерывание.
У этого семейства богатые функции перенаправления функционала пинов,
поэтому модель драйвера выглядит иначе. Ипользуется указатель на девайс,
а не индекс устройства, как в stm32f10x.
Пришлашаю к сотрудничеству и совместной разработке.
Делайте fork и оставляйте пожелания. Пожалуйста, используйте английский язык.
https://github.com/Virviglaz/stm32f103
https://github.com/Virviglaz/stm32f0xx
|
|
|
|
03.10.2020, 14:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Пишу драйвера для stm32f10x и stm32f0xx
Уууу, приветствуем тебя снова! Наше вам с кисточкой  Говорят, сейчас правильно называть "Нидерланды", чтобы не ассоциировалось с Голландским сыром, который в Голландии никогда и не видели
По теме темы я в принципе не сильно то заморачиваюсь, а просто пишу (копипасчу) под конкретное применение. Благо, там сложностей больших то нету. Единственная заморочка - это USB, но по счастью оное сейчас уже не шибко то актуально (активно вытесняется беспроводными технологиями).
Для самых ленивых есть CubeHAL, уже адаптированный под разворачивание FreeRTOS.
Сообщение от Easyrider83
|
|
Пожалуйста, используйте английский язык.
|
 А здесь по-русски отвечать можно?
|
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
03.10.2020, 15:34
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Пишу драйвера для stm32f10x и stm32f0xx
|
|
|
|
03.10.2020, 18:32
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Пишу драйвера для stm32f10x и stm32f0xx
Про RCC.
Поскольку время от времени я использую динамическое управление частотой, которое актуально при батарейном питании и особенно в L-серии, то я пишу функцию переключения частот и источников тактирования. Это функция вида
|
Код:
|
void SetSystemClock(int8_t mode)
{
switch(mode) {
case ULTRAPERFORM: ‹...›
break;
case BOOST: ‹...›
break;
case NORMAL: ‹...›
break;
case ECON: ‹...›
break;
case IDLE: ‹...›
break;
} |
причем, поскольку некоторые тайминги (таймеры, скорость UART, I2C) должны оставаться постоянными, приходится тут же в этой функции корректировать все эти значения.
Частота должна переключаться по возможности быстро, с минимальными задержками (особенно на повышение), значит, нужно это делать по кратчайшему пути, без лишних программерских телодвижений. То есть, никаких вычислений при исполнении, все коэфф. уже прописаны, и никаких лишних вызовов функций.
Так же, требуется определение причины сброса по анализу битов. Например, когда вставили батарейки или подключили аккумулятор, полного запуска быть не должно. А вот при сбросе после выхода из Standby - другое дело. Так же иногда сброс кнопкой на NRST - это переход в сервисный режим с диагностическим или иным функционалом.
|
|
|
|
03.10.2020, 18:50
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Пишу драйвера для stm32f10x и stm32f0xx
Сообщение от NewWriter
|
Про RCC.
Поскольку время от времени я использую динамическое управление частотой, которое актуально при батарейном питании и особенно в L-серии, то я пишу функцию переключения частот и источников тактирования
|
У меня реализован механизм выбора частоты в зависимости и текущей частоты ядра, но он применяется только один раз при инитиализации. У меня пока нет необходимости это менять. Если хотите поучаствовать, буду рад увидеть merge request.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:36.
|
|