LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

Начинать с AVR точно смысла нет.

Спорное мнение. На AVR в отличии от ARM нет кучи режимов тактирования, периферия попроще и т. д. При использовании AVR можно вообще использовать только 1 даташит, ничего не гуглить, настроить нужный периферийный модуль в пару строчек в виде присваивания регистрам и работать.

Как помигать светодиодом на AVR?

DDRB |= _BV(1);
while (1) {
PORTB ^= _BV(1);
_delay_ms(500);
}

Как помигать светодиодом на ARM?

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Pin = GPIO_Pin_12;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio);
while (1) {
GPIO_SetBits(GPIOA, GPIO_Pin_12);
delay(500);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
delay(500);
}

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

В результате для новичка таки будет проще AVR, с его скромной, зато очень простой и понятной периферией, которая настраивается в пару строчек.

Я до сих пор не могу до конца разобраться с работой с I2C на STM32, хотя на AVR всё заводилось с пол-пинка. То ли я где-то косячу, то ли ошибка в стандартной библиотеке. Самое интересно, что частично оно работает, а через пару секунд чтений зависает.

Исправление KivApple, :

Начинать с AVR точно смысла нет.

Спорное мнение. На AVR в отличии от ARM нет кучи режимов тактирования, периферия попроще и т. д. При использовании AVR можно вообще использовать только 1 даташит, ничего не гуглить, настроить нужный периферийный модуль в пару строчек в виде присваивания регистрам и работать.

Как помигать светодиодом на AVR?

DDRB |= _BV(1);
while (1) {
PORTB ^= _BV(1);
_delay_ms(500);
}

Как помигать светодиодом на ARM?

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Pin = GPIO_Pin_12;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio);
while (1) {
GPIO_SetBits(GPIOA, GPIO_Pin_12);
delay(500);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
delay(500);
}

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

В результате для новичка таки будет проще AVR, с его скромной, зато очень простой и понятной периферией, которая настраивается в пару строчек.

Исходная версия KivApple, :

Начинать с AVR точно смысла нет.

Спорное мнение. На AVR в отличии от ARM нет кучи режимов тактирования, периферия попроще и т. д. При использовании AVR можно вообще использовать только 1 даташит, ничего не гуглить, настроить нужный периферийный модуль в пару строчек в виде присваивания регистрам и работать.

Как помигать светодиодом на AVR?

DDRB |= _BV(1);
while (1) {
PORTB ^= _BV(1);
_delay_ms(500);
}

Как помигать светодиодом на ARM?

GPIO_InitTypeDef gpio;
gpio.GPIO_Pin = GPIO_Pin_12;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio);
while (1) {
GPIO_SetBits(GPIOA, GPIO_Pin_12);
delay(500);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
delay(500);
}

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

В результате для новичка таки будет проще AVR, с его скромной, зато очень простой и понятной периферией, которая настраивается в пару строчек.