Jump to content

Recommended Posts

хотел уточнить насчёт изменения скорости 2/10мГц.

это скорость с которой может ножка дергаться? Это зависит от внутреннего кварца? А если использовать внешний кварц, тогда как скорость регулировать?

Отправлено с моего Wileyfox Swift через Tapatalk

Там не 2/10МГц, там до 2 или до 10 МГц, и зависит это от частоты тактирования. Т. е. при любом источнике, хоть внутренним хоть внешним, режим FAST (до 10Мгц) заставляет действовать порт без ограничений скорости, а обычный режим вносит замедление переключений. Само собой скорость кратна текущей тактовой частоте. Коэффициент кратности не указан в описалове, тут я без понятия, как то не особо вникал, но можно наверное где то в дебрях их офф. сайта найти.

Share this post


Link to post
Share on other sites

Конспект к лекции 4.

Тема урока: "Тактовые генераторы"

1. Регистры управления статусом встроенных тактовых генераторов (CLK_ICKR) Internal clock register17d80d4e7ed6.jpg

Address offset: 0x00

Reset value: 0x01

Биты 7 и 6 - зарезервированы

5-й бит:

REGAH - Regulator Active-halt (переключатель Активен - Остановка)

REGAH (rw) Отключает программно внутренний источник питания ядра процессора (используется для понижения энергопотребления)

0: Основной регулятор напряжения ВКЛЮЧЕН, положение Active-halt mode - ON

1: Основной регулятор напряжения ВЫКЛЮЧЕН, положение Active-halt mode - OFF (время пробуждения увеличивается)

LSIRDY - Low speed internal ready (готовность низкоскоростного тактовый генератора)

4-й бит:

LSIRDY (r) Бит готовности низкоскоростного тактового генератора (устанавливается аппаратно)

0: Низкочастотный тактовый генератор НЕ ГОТОВ (LSI clock not ready)

1: Низкочастотный тактовый генератор ГОТОВ (LSI clock ready)

LSIEN- Low speed internal enable (Влючене низкоскоростного тактовый генератора)

3-й бит:LSIEN (rw) Бит включения низкоскоростного тактового генератора (Устанавливается программно или аппаратно если необходим низкочастотный тактовый генератор)

0: Низкочастотный тактовый генератор ВЫКЛЮЧЕН (LSI - off)

1: Низкочастотный тактовый генератор ВКЛЮЧЕН (LSI - On)

2-й бит:FHWU (rw) Быстрое пробуждение из режима "Активен/Активная-остановка"

0: Быстрое пробуждение из режима "Активен/Активная-остановка ОТКЛЮЧЕНА (Halt/Active-halt - off)

1:Быстрое пробуждение из режима "Активен/Активная-остановка ВКЛЮЧЕНА (Halt/Active-halt - on)

HSIRDY- High speed internal ready

1-й бит:HSIRDY(r) Сигнализация о готовности высокочастотного встроенного тактового генератора. (Устанавливается аппаратно)

0: Высокочастотный тактовый генератор НЕ ГОТОВ (HSI clock not ready)

1: Высокочастотный тактовый генератор ГОТОВ (HSI clock ready)

HSIEN- High speed internal enable

0-й бит:HSIEN (rw) Бит включающий встроенный высокочастотный тактовый генератор. (Устанавливается программно или аппаратно если необходим высокочастотный тактовый генератор)

0: Высокочастотный тактовый генератор ВЫКЛЮЧЕН (HSI - off)

1: Высокочастотный тактовый генератор ВКЛЮЧЕН (HSI - on)

2. Регистры управления внешним тактовым генератором (CLK_ECKR) External clock register

655b3c2fe40b.jpg

Address offset: 0x01

Reset value: 0x00

Биты с 7 по 2 - зарезервированы

HSERDY- High speed external enable

1-й бит:HSERDY (r) Готовность высокочастотного внешнего тактового генератора

0: Высокочастотный внешний тактовый генератор НЕ ГОТОВ (HSE clock not ready)

1: Высокочастотный внешний тактовый генератор ГОТОВ (HSE clock ready)

HSEEN- High speed external enable

0-й бит:HSEEN (rw) Разрешение работы высокочастотного внешнего тактового генератора

0: Высокочастотный внешний тактовый генератор ВЫКЛЮЧЕН (HSE clock off)

1: Высокочастотный внешний тактовый генератор ВКЛЮЧЕН (HSE clock on)

3.1 Регистр статуса генератора CLK_CMSR Clock master status register

f65e0f05f5b1.jpg

Address offset:0x03

Reset value: 0xE1

CKM - Clock master status bits

CKM (r) Эти биты устанавливаются и сбрасываются аппаратно.

0xE1 - HSI выбран высокочастотный внутренний тактовый генератор

0xD2 - LSI выбран низкокочастотный внутренний тактовый генератор

0xB4 - HSE выбран внешний высокочастотный тактовый генератор

3.2 Регистр переключения генератора CLK_SWR Clock master swith register

6260df8661a8.jpg

Address offset: 0x04

Reset value: 0xE1

SWI (rw) Эти биты устанавливаются и сбрасываются

0xE1 - HSI выбран высокочастотный внутренний тактовый генератор

0xD2 - LSI выбран низкокочастотный внутренний тактовый генератор

0xB4 - HSE выбран внешний высокочастотный тактовый генератор

пример кода:

const unsigned char HSE=0xb4; //внешний генератор

CLK_SWR=HSE; //записываем новое значение типа генератора

4. Регистр контроля переключения CLK_SWCR Switch control register

551570cc5151.jpg

Address offset: 0x05

Reset value: 0xXX

Биты с 7 по 4 - зарезервированы

SWIF- switch interrupt flag

3-й бит:SWIF (rc_w0) Бит флага прерывания по переключению

0 Переключение не завершено, генератор не готов (Target clock source not ready)

1 Переключение завершено, генератор готов (Target clock source ready)

SWIEN- switch interrupt enable

2-й бит:SWIEN (rw) Разрешение прерывания по переключению

0 Прерывание запрещено (Clock switch interrupt disabled)

1 Прерывание разрешено (Clock switch interrupt enabled)

SWEN- switch enable

1-й бит:SWEN (rw) Бит разрешения переключения

0 Переключение между генераторами запрещено (Disable clock switch execution)

1 Переключение между генераторами разрешено (Enable clock switch execution)

код: CLK_SWCR_SWEN=1; //разрешаем переключение между генераторами

SWBSY- switch busy

0-й бит:SWBSY (rw) Бит сигнализирующий что идет переключение

0 Переключение между генераторами завершено (No clock switch ongoing)

1 Происходит переключение между генераторами (Clock switch ongoing)

Edited by IDis

Share this post


Link to post
Share on other sites

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

Читать статью

5. Регистр делителей CLK_CKDIVR Clock divider register

d29906952a92.jpg

Address offset: 0x06

Reset value: 0x18

Биты с 7 по 5 - зарезервированы

4й и 3-й бит:HSIDIV (rw) Задаем предделитель для высокочастотного HSI тактового генератора

00 f HSI = f HSI RC output /1

01 f HSI = f HSI RC output /2

10 f HSI = f HSI RC output /4

11 f HSI = f HSI RC output /8

0й, 1й и 2-й бит:CPUDIV(rw) Задаем предделитель для микропроцессора.

000: f CPU = f MASTER / 1

001: f CPU = f MASTER / 2

010: f CPU = f MASTER / 4

011: f CPU = f MASTER / 8

100: f CPU = f MASTER / 16

101: f CPU = f MASTER / 32

110: f CPU = f MASTER / 64

111: f CPU = f MASTER / 128

6 регистр тактирования переферии CLK_PCKENR1 Peripheral clock gating register

0eaf44de6a3c.jpg

Address offset: 0x07

Reset value: 0xFF

Периферийные устройства генератора тактовых импульсов

0 f MASTER Недоступна для переферии (f MASTER to peripheral disabled)

1 f MASTER Доступна для переферии (f MASTER to peripheral enabled)

PCKEN17 - TIM1

PCKEN16 - TIM3

PCKEN15 - TIM2 / TIM5

PCKEN14 - TIM4 / TIM6

PCKEN13 - UART 1/2/3/4

PCKEN12 - UART 1/2/3/4

PCKEN11 - SPI

PCKEN10 - I2C

7 регистр тактирования переферии CLK_PCKENR2 Peripheral clock gating register

a88dd4d425de.jpg

Address offset: 0x0A

Reset value: 0xFF

Периферийные устройства генератора тактовых импульсов

0 f MASTER Недоступна для переферии (f MASTER to peripheral disabled)

1 f MASTER Доступна для переферии (f MASTER to peripheral enabled)

PCKEN27 - CAN

PCKEN26 - Зарезервирован

PCKEN25 - Зарезервирован

PCKEN24 - Зарезервирован

PCKEN23 - ADC

PCKEN22 - AWU

PCKEN21 - Зарезервирован

PCKEN20 - Зарезервирован

8. регистр безопасности CLK_CSSR Clock security system register

d2f892a2eeb9.jpg

Address offset: 0x08

Reset value: 0x00

Биты с 7 по 4 - зарезервированы

CSSD -Clock security system detection

3-й бит:CSSD (rc_w0) Бит определяющий сбой

0: внешний генератор частоты не обнаружен (CSS is off or no HSE crystal clock disturbance detected.)

1: внешний генератор частоты обнаружен (HSE crystal clock disturbance detected)

CSSDIE -Clock security system detection interrupt enable

2-й бит:CSSDIE(rw) Бит разрешающий прерывания по событию (не обнаружен кварц)

0: Запрещено (Clock security system interrupt disabled)

1: Разрешено (Clock security system interrupt enabled)

CSSDIE -Clock security system detection interrupt enable

1-й бит:AUX (r) Бит состояния встроенного тактового генератора включен/выключен

0: встроенный тактовый генератор выключен(Auxiliary oscillator is off.)

1: Встроенныйтактовый генератор включен на частоте HSI/8 (Auxiliary oscillator (HSI/8) is on and selected as current clock master source)

CSSEN -Clock security system enable

1-й бит:CSSEN(rwo) Бит включающий этот узел безопасности

0: выключен (Clock security system off)

1: включен (Clock security system on)

Edited by IDis

Share this post


Link to post
Share on other sites

9.Регистр конфигурации выходной тактовой частоты CLK_CCOR Configurable clock output register

60f3ac171abb.jpg

Address offset: 0x09

Reset value: 0x00

Бит 7 - зарезервирован

CCOBSY: Configurable clock output busy

6-й бит:CCOBSY(r) Бит состояния

0: Тактовый генератор не занят (CCO clock not busy)

1: Тактовый генератор занят (CCO clock busy )

CCORDY: Configurable clock output ready

5-й бит:CCORDY(r) Данный узел осуществил переключение и готов к выдаче тактовой частоты

0: Тактовый генератор не занят (CCO clock not available)

1: Тактовый генератор занят (CCO clock available)

CCOSEL[3:0]: Configurable clock output selection.

с 4й по 1-й бит:CCOSEL(rw) Выбираем частоту которую будем выдавать наружу.

0000 f HSIDIV

0001 f LSI

0010 f HSE

0011 Резерв

0100 f CPU

0101 f CPU /2

0110 f CPU /4

0111 f CPU /8

1000 CPU /16

1001 f CPU /32

1010 f CPU /64

1011 f HSI

1100 f MASTER

1101 f CPU

1110 f CPU

1111 f CPU

c1e04eb44696.jpg

Ручное управление генератором:

690f92e1a20a.jpg

2a15158a73fb.jpg

Вопросы по лекции 4:

- то есть можно устройству использовать частоту 24 МГц а процессор питать от 24МГц / 8 / 128 = 234КГц?

- REGAH - что значит отключает внутренний источник питания ядра процессора? Отключить процессор от питания вообще, или в процессоре есть какая то своя батарейка? За что эта батарейка отвечает?

- у регистра CLK_SWCR бит SWIF что означает запись - rc_w0? read clock..... а w0 что?

- у регистра CLK_CSSR бит CSSEN что означает запись rwo?

- что означает запись в заглавии описания каждого регистра CLK_CKDIVR и им подобным: Address offset: 0x06 и Reset value: 0x18?

- как происходит работа регистра калибровки тактового генератора (CLK_HSITRIMR)?

- что означает 7:0 в таблице регистра CLK_CMSR и CLK_SWR?

- регистр CLK_CMSR указывает на f master?

Share this post


Link to post
Share on other sites
                     

STM32G0 - средства противодействия угрозам безопасности

Результатом выполнения требований безопасности всегда является усложнение разрабатываемой системы. Особенно чувствительными эти расходы стали теперь, в процессе массового внедрения IoT. Обладая мощным набором инструментов информационной безопасности, микроконтроллеры STM32G0 производства STMicroelectronics, объединив в себе невысокую цену, энергоэффективность и расширенный арсенал встроенных аппаратных инструментов, способны обеспечить полную безопасность разрабатываемого устройства.

Подробнее...

Про 24 МГц, нет так для внешнего нельзя. Так можно только для внутреннего. Т. е. 16 000 000/8/128, для внешнего только /128.

Про источник питания ядра. Это было в первом или втором ролике, и это ещё будет более подробно. Питания ядра осуществляется от 1,8В, внутри встроенный стабилизатор напряжения , вот он и отключается.

rc_w0 - обозначение возможных операций над битами, не помню где в документации описаны все, это обозначает что бит устанавливается только аппаратно, а сбрасывается только программно. Т. е. возможна только запись нуля, на всё остальное компилятор будет ругаться.

rw0 - обозначает, что бит может читаться множество раз, но записать его можно только единожды.

Adress offset - физический адрес регистра в памяти микроконтроллера, Reset Value - состояние принимаемое регистром после сброса.

[7:0] - обозначает разрядность регистра - байт, т. е. невозможно побитовое чтение/запись, компилятор будет ругаться.

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

В принципе все обозначения для каждого бита/регистра типа rc_rw0 описываются прямо в описание, и искать весь перечень таких сокращений не нужно. Можно просто перевести. Но если нужно, я поищу полную таблицу.

Edited by i80186

Share this post


Link to post
Share on other sites

Хотел уточнить по уроку 3 Конфигурация выводов.

Вот у меня есть код, но он не включает светодиод. Почему?

Ведь регистр CR1 если он равен нулю, то он принимает значение - стандартный выход. Но при значении 0, ничего на ножке нет, кроме скачущего напряжения (замерить тостером его невозможно). Тогда что же это за стандартный выход? И в каких случаях его используют?

int main( void )
{
PB_DDR_bit.DDR2=1; // направление - выход
PB_CR1_bit.C12=0; // стандартный выход
PB_CR2_bit.C22=0; // 2МГц
PB_ODR_bit.ODR2=1; // выход включен
return 0;
}

И второй вопрос:

Почему в окне whaсh1

- значения a и b недоступны?

- почему значение с он вообще не показывает?

c191d038d3e7.jpg

Share this post


Link to post
Share on other sites

Потому что включается светодиодом нулём, ну в STM8S-DISCOVERY так по схеме сделано. Да и сам светодиод подключён к PD0. И когда CR1 "0", тогда открытый исток, надо туда "1" для "стандартного выхода".

Не доступны, видимо потому, что объявляются внутри основной функции. Зачем их там объявлять то вообще? Лучше на верх их самый, вон туда где #include. Функция она как бы всегда вызвана, память, занятая этими переменными, никогда не освободится. Вот видимо разработчики среды и не понимали зачем, и закрался баг. Просто не надо внутри основной функции их объявлять, смысла нет. А переменная "с" вообще не объявляется, точнее операция с двумя другими переменными выполняется прям при её объявление, так делать не хорошо.

Edited by i80186

Share this post


Link to post
Share on other sites

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

Отправлено с моего Wileyfox Swift через Tapatalk

Share this post


Link to post
Share on other sites

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

Отправлено с моего Wileyfox Swift через Tapatalk

Так я же уже пояснял. Например питание микроконтроллера 5В, необходимо подключить низковольтную логику, скажем 1,28В. Включаем этот режим, вешаем подтягивающий резистор к 1,28В, имеем выходной сигнал для низковольтной логики. Шалтай болтай именно потому, что единицы нет, только ноль, единицу нужно внешним резистором задавать. Фактически, когда на выход должна быть подана единица в таком режиме, а резистора нет, вывод и болтается в воздухе, он просто отключён.

Edited by i80186

Share this post


Link to post
Share on other sites
Например питание микроконтроллера 5В, необходимо подключить низковольтную логику, скажем 1,28В. Включаем этот режим, вешаем подтягивающий резистор к 1,28В, имеем выходной сигнал для низковольтной логики. Шалтай болтай именно потому, что единицы нет, только ноль, единицу нужно внешним резистором задавать

Пытался медитировать... но просветления не наступило.

- имеем сигнал.

- на выходе ноль.

Что это за сигнал такой в виде нуля?

Если мы на эту ножку подаем 1.28В тогда почему она считается выходом на не входом?

И как происходит управление низковольтной нагрузкой?

Edited by IDis

Share this post


Link to post
Share on other sites

Ну собственно контроллер может только к нулю выход подключить, единица(транзистор подтягивающий выход к +питания) отключён. А на выход ты уже сам настраиваешь же.

https://ru.wikipedia.org/wiki/%D0%9A%D0%9C%D0%9E%D0%9F

Вот там на рисуночке верхний транзистор как бы отключён.

Share this post


Link to post
Share on other sites

А как использовать прерывания на выходах? (не через таймер)

Не подскажите как программно реализовать следующее:

- включен светодиод

- Когда на ножке А2 сигнал меняется с 1 на 0

- используем прерывание и выключаем светодиод

Какие регистры для этого используются?

Share this post


Link to post
Share on other sites

Там отдельные регистры в контроллере прерываний есть для настройки прерываний от портов, про это ещё не было уроков.

Т.е. в регистре EXTI_CR1 надо для соответствующего порта биты выставить.

Собственно а для чего прерывание?

Share this post


Link to post
Share on other sites

в качестве тренировки. Кстати было бы классно давать домашнее задание к урокам.

Share this post


Link to post
Share on other sites

DOC000954191.jpg

Скоро опубликуют видео с практикой. Там датчик заднего хода - ультразвуковой измеритель расстояния. Есть возможность для творчества. Например его в измеритель уровня переделать. Правда надо датчик HC-SR04 иметь.

Edited by i80186

Share this post


Link to post
Share on other sites

Пытаюсь разобраться сo счетчиком.

- на 15 мин. лекции 4 вы сказали что задаем значение для TIM4_ARR=100; и он дальше сравнивает со значением счетчика, счетчик это TIM4_CNTR . Но вы нигде этот регистр не использовали. Да и в режиме отладки он не показывает значение TIM4_CNTR.

- почему vector =TIM4_OVR_UIF_vector? откуда мы берем TIM4_OVR_UIF_vector?

Edited by IDis

Share this post


Link to post
Share on other sites

В настройках таймера загружается значение в регистр автозагрузчика TIM4_ARR. Это делается только один раз. И показывает он значение таймера.

Значение векторов прерывания в заголовочном файле в самом низу.

Share this post


Link to post
Share on other sites

#include <iostm8s105c6.h>
void main (void)
{
TIM4_CR1_CEN=1; // включили таймер
TIM4_CR1_ARPE=1; //разрешаем автолоадер
int a=0;
TIM4_ARR=7;
if (TIM4_ARR==TIM4_CNTR)
	 a=3;
else
       a=1;
}

как увидеть чему равен счетчик?

И как мне сосчитать до 7?

почему я не вижу значение а в окне watch?

b724c69a40d1.jpg

Edited by IDis

Share this post


Link to post
Share on other sites

Объявляй переменные вне основной функции(вне main)

TIM4_ARR и TIM4_CNT сравнивать не надо. Это автоматически происходит. Просто проверяй флаг UIF, когда он становиться равен 1, то произошло событие переполнения счётчика/превышение его значение над регистром ARR.

Если просто для попробовать, то величину ARR побольше сделай, так смотреть удобнее будет.

Т. е. должно быть как то так.

#include <iostm8s105c6.h>

int a=0;

void main (void)

{

TIM4_CR1_CEN=1; // включили таймер

TIM4_CR1_ARPE=1; //разрешаем автолоадер

TIM4_ARR=7;

if (TIM4_SR_UIF==1){

a=3;

TIM4_SR_UIF=0;

}

else {

a=1;

}

}

После if, else, и прочих операторов кавычки ставить надо.

И программу надо зациклить, так она только один раз выполниться. Например так.

#include <iostm8s105c6.h>

int a=0;

void main (void)

{

TIM4_CR1_CEN=1; // включили таймер

TIM4_CR1_ARPE=1; //разрешаем автолоадер

TIM4_ARR=7

loop:

if (TIM4_SR_UIF==1){

a=3;

TIM4_SR_UIF=0;

}

else {

a=1;

}

goto loop;

}

И да, побольше величину в ARR, ну что бы видно было как таймер насчитывает. Так слишком быстро происходит счёт, можно и не увидеть число 7, потому что пока операторы выполняются регистры отладчиком не обновляются, у тебя сейчас всего восемь тактов на таймере до переполнения, не знаю сколько if else выполняется, можешь просто не увидеть. Ну или предделитель задай.

Если надо именно момент увидеть когда таймер стал больше какого то числа, то проверяешь сам регистр счётчика таймера, т. е. так.

loop:

if (TIM4_CNTR>=6){

a=3;

}

else {

a=1;

}

goto loop;

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

Edited by i80186

Share this post


Link to post
Share on other sites
Объявляй переменные вне основной функции

То есть все переменные должны быть объявлены глобально?

И это надо делать для всех функций?

И для цикла for такая же ерунда? То есть нельзя написать for (int i; i>0; i++){}?

Я так и не нашел, где можно глянуть значение таймера? Вы в лекции об этом не упоминали.

Share this post


Link to post
Share on other sites

Нет не все конечно. Только те, что в функции main. И в циклах не надо объявлять, это просто нечитаемо.

А значение таймера - регистр TIM4_CNTR. Это собственно и есть сам таймер.

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

Так то, по стандартам языка, можно и в функции main объявлять, но вот не нравиться это среде и отладчику. Но вот в операторе это точно делать не стоит.

Т. е. каждую переменную, ну или массив, отдельной строкой всегда. Всегда в начале функции/файла. Всегда с комментарием.

Именно в начале не от того, что по другому работать не будет. Возможно и будет, просто разбираться в программе будет сложно, если будет иначе.

Edited by i80186

Share this post


Link to post
Share on other sites
значение таймера - регистр TIM4_CNTR. Это собственно и есть сам таймер.

в упор не вижу. Регистр этот в нуле.

4ec47a6b5b4b.jpg

Share this post


Link to post
Share on other sites

Так с STM8S-DISCOVERY или просто на симуляторе? Симулятор не обеспечивает работу периферии.

Ну да на симуляторе, конечно оно и не будет показывать. С самого начала про этого говорилось. Надо "живое" устройство. Это или что то своё, использующие ST-LINK, или STM8S-DISCOVERY.

Он не дорогой, в районе 1000р., в зависимости от места покупки. Очень стоит его купить. Там сразу два устройства - ST-LINK и платка с процессором.

Edited by i80186

Share this post


Link to post
Share on other sites

Возник еще вопрос:

если и процессор и таймер тактируются от одного генератора (HSI)

То интересно, почему значения таймера отличаются от значения тактов процессора.

У процессора прошло 13 тактов а у таймера значение - 24

Что считает процессор понятно, один такт это передача 8 байт информации.

А таймер что считает?

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By n_angelo
      Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален.
      Используемая периферия: DAC, DMA, TIM4, CLK, GPIO
      Задача у программы такая:
      В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод.
      Проблема:
      Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом.
      Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается.
      Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг.
      Спасибо.
       
       
       
       
    • By n_angelo
      Привет. Хочу узнать ваше мнение. Я новичок в embedded. Можно сказать, что пришел с веба. Малость Python, JS, C. Меня, конечно, предупреждали начать с AVR, но я уверенный в себе решил сразу залезть на STM32. Вынашивая идею для проекта, параллельно курив Reference Manual и Data Sheet по STM32, я понял что его будет слишком жирно для проекта. Я перескочил на STM8L. И тут меня начал огорчать мир embedded. При переходе между stm8 и stm32 нужно менять IDE (TrueStudio на STVD). Во избежание таких курьёзов я пересаживаюсь на IAR. В процессе подключения родной библиотеки от ST, понимаю что библиотека от IAR для того же самого STM8L152C6T6 дико отличается (макросы, структуры). Привет веб-разработка. Как такое могло произойти, что под один и тот же контроллер ST даёт одну библиотеку, а IAR другую. И нигде в уроках тебя не предупредят об этом. Ну, ребят, у меня всего одна жизнь. Вы уже договоритесь там между собой? Придите к единому стандарту. Или они так решили новичков завендерлочить? Моё мнение (не претендует на правильное): пробираясь сквозь тернии популярной архитектуры ARM, инфраструктуры, инструментария, забываешь про бизнес-логику устройств. А еще просто пропасть между "я ничего не понимаю" и "господи, я зажег светодиод". Речь не о копипастерах с уроков, а действительно понимая что ты делаешь, в каком регистре, что меняешь. Это путь в 2000 (а то и больше) страниц на английском перечитанных по несколько раз, чтобы отоложилось. И в конце тебя ждут разные версии одной и той же библиотки в разных IDE. И сидишь вдупляешь... ну почему... я же в правильный регистр кладу правильную маску... ох, наболело. Такое ощущение что не для людей это всё делали, не для людей.
      Ваше мнение?
    • By akva
      Народ помогите разобратся с выводом изображения на цветной дисплей от видеоискателя видеокамеры панасоник NVR 2000, схема есть куда припаять питание и виеовход
      NV-R50_NV-R500.pdf
    • Guest mrRobot
      By Guest mrRobot
      Добрый день! Был бы признателен, если бы кто нибудь подкинул любые источники информации на тему жизненного цикла микроконтроллеров. Книги, статьи, что угодно - лишь бы освещались данные пункты:
      Описание этапов жизненного цикла изделия (микроконтроллеров) и средств автоматизации, применяемых на данных этапах. Анализ взаимодействия средств автоматизации внутри каждого этапа и между этапами. Заранее спасибо!
    • By DFRobot
      Что может быть проще Arduino IDE!
      Для разработки под ESP32 (ESP-WROOM-32) есть множество различных платформ. Но, если в некоторых ситуациях использование Linux или cygwin под Windows может отпугнуть новичков, то простой и дружественный интерфейс Arduino IDE окажется как нельзя кстати. Ниже рассмотрим по шагам, как её адаптировать для программирования ESP32.
      1. Добавляем URL-адрес платы в Arduino IDE .
      Открываем Arduino IDE (у меня версия 1.8.0). Если у вас она не установлена, то инструкцию по установке можно найти здесь. 
      Далее выбираем Файл -> Настройки и нажимаем на кнопку “Дополнительные ссылки для менеджера плат”, как показано ниже.

       
      В появившемся окне вводим адрес:   https://git.oschina.net/dfrobot/FireBeetle-ESP32/raw/master/package_esp32_index.json и видим :

      После завершения нажимаем ОК.
      2. Обновляем список плат.
      Когда URL платы ESP32 (ESP-WROOM-32) добавлен, обновим список плат, чтобы через Arduino IDE загрузить необходимые библиотеки ESP32 (ESP-WROOM-32).
      Открываем Инструменты -> Плата: “Имя платы” -> Менеджер плат,

       
      и их список должен автоматически обновиться:

       
      3. Установка ESP32 (ESP-WROOM-32).
      Как только обновление завершится, найдём свойства платы FireFly-ESP32 Mainboard.

       
      Выбираем “FireBeetle-ESP32 Mainboard” и жмём “Установить”. Менеджер автоматически скачает необходимые библиотеки.


       
      4. Компилируем программу мигания светодиодом.
      Когда библиотеки установлены, можем, наконец, загрузить тестовую программу. Открываем Инструменты -> Плата, выбираем из списка Firefly-ESP32:

      Внимание: проверьте, что Вы выполнили все шаги, описанные выше. Если Вы не установили плату ESP32 (ESP-WROOM-32), то в списке её не окажется!
      Открываем Файл -> Примеры -> Basics -> Blink:

       
      И жмём  , чтобы запустить компиляцию.

      Готово!
       
      У DFRobot есть много других обучающих статей по ESP32 и готовых проектов на основе ESP32.
  • Сообщения

    • Более менее разбирающемуся в приборчиках радиолюбителю и так знакомо, что резисторы в цепи шунта бывают кратны девятке. Там по схеме где то стоит 100 Ом, а шунтовые резисторы 0.9 , 9, 90, 900, 9к, и дальше. 
    • Только дошёл чтоли?
    • Да, плата одна и БП один, а вот сами усилители разведены отдельно и земли собираются отдельно на мекке конденсаторов БП.  Но это тема другого усилителя. Тут не актуально.  А то ведь могу приплести два ламповых фонокорретора, собирал недавно, навесником  Тоже тишина. 
    • В рамках расхламления продаю следующее: GSM/GPS+bluetooth модули SIM808, новые, в упаковке - 7шт, 400руб, шт. GPS антенны A25-4102920-AMT02 [GPS/GLONASS] - 11шт, цена 50р, шт. Понижающий DC-DC преобразователь на базе LM2596, новый в упаковке - 15шт., 50р, шт. Резисторы 0805, 10кОм, 5%, катушка 3000+ шт. - 350р. за все. Конденсаторы 0402-X7R-16V- 0.10uF (100nF) 10% MC02KTB160104 - катушка 9000+шт, 900руб за все. Отправка почтой по России.
    • Он Вам примерно прикинул кол-во того и того, точных цифр не существует и существовать не может. И это только первый, прикидочный, шаг. Это Вам в раздел "работа" и там, договорившись с исполнителем, Вы сможете определить   и что нибудь решить.
    • Так там у тебя плата одна, то бишь стерео. А в стерео пробоемы петель нет априори.
  • Покупай!

×
×
  • Create New...