LINUX.ORG.RU

Tim1

 ,


0

1

stm32f103c8 здрасьте здрасьте люди добрые) поправьте пожалуйста код, чтобы работало. Смысл такой, что надо сделать для понимание мигание светодиода с итревалом 3 сек с помощью таймера TIM1. пожалуйста обратите внимание на теги. в них нет СИ. не пишите пожалуйста примеры, которые не будут работать без библиотек, или которые вобще не будут работать.

.cpu cortex-m3
.thumb
.section .text
TIM1_PSC_zero_bit:  .word 0x42258500
TIM_CR1_CEN:        .word 0x42258000
TIM_CR1:            .word 0x40012c00
TIM_BDTR_MOE:       .word 0x422588BC
TIM1_PSC:           .word 0x40012c28

RCC_APB2ENR_TIM1EN: .word 0x4242032C//адрес рассчитан по формуле(смещение*32)+(4*Numbit)+0x42000000
//так как таймер будет работать у меня от частоты шины, то подключаю его.

.global _start
_start:
mov r5, #1
ldr r0, =RCC_APB2ENR_TIM1EN
str r5, [r0]

//TIM1_CNT оставлю по умолчанию.
mov r1, #1
ldr r0, =TIM_CR1_CEN
str r1, [x0]// разрешает счет.

//настраиваю счетчик на дикремент. 
ldr r0, =TIM_CR1_CEN
mov r1, #1
str r1, [r0, #16]// поместил единицу в бит DIR
mov r1, #0
str r1, [r0, #20]  поместил ноль в бит CMS
str r1, [r0, #24] поместил ноль в бит СМS
//помещаю 7999 в TIM_PSC
mov r1, #1
mov r2, #0
ldr r0, =TIM1_PSC_zero_bit
str r1, [r0]
str r1, [r0, #4]
str r1, [r0, #8]
str r1, [r0, #12]
str r1, [r0, #16]
str r1, [r0, #20]
str r2, [r0, #24]
str r2, [r0, #28]
str r1, [r0, #32]
str r1, [r0, #36]
str r1, [r0, #40]
str r1, [r0, #44]
str r1, [r0, #48]
// в TIM_PSC лежит #1111100111111
up:


bl up
чтобы светодиод мигал что нужно сделать? как связать ногу PC13 c TIM1?

Ответ на: комментарий от Assembler

и как-то странно. просишь примеры Assembler, никто не пишет. тогда просишь объяснить на пальцах, люди пишут сразу примеры а СИ) хотя между Assembler и СИ мало общего

Потому что мазохистов писать под stm на ассемблере немного.

А в плане периферии и настройки регистров разница между ассемблером и Си только в том, что на Си гораздо нагляднее получается.

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

COKPOWEHEU
()

@Assemble смотри не умудрись потерять помощь хороших профессионалов …

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Потому что мазохистов писать под stm на ассемблере немного.

сейчас это не требуется. чистая теория.

на Си гораздо нагляднее получается.

для кого?

бездумно компилируйте чужой код.

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

RCC_APB2ENR = 0x40021018
RCC_APB2ENR_IOPAEN = (1 << 2)// enable IOPAEN
RCC_APB2ENR_TIM1 = (1 << 11)// enable TIM1EN
RCC_APB2ENR_AFIOEN=(1<<0) //enable AFIOEN

что еще надо сделать чтобы настроить ногу A8 на AFIO ?

Assembler
() автор топика
Ответ на: комментарий от anonymous

ты пугаешь что ли? я знаю этот форум. и знаю кто тут. мне сказки не рассказывай. Еще живо воспоминание об LGH, как его забанили за неудобные вопросы. и хорошо вижу какие вопросы тут в почоте: ПОМОГИТЕ выбрать клавиатуру, помогите выбрать коврик для мышки, помогите выбрать жене прокладки. вы просто хотите поругаться или что? я не для этого тут. вопросы задаю потеме. не нравится если что-то иди ..... на

Assembler
() автор топика
Ответ на: комментарий от Assembler

ты пугаешь что ли? я знаю этот форум. и знаю кто тут. мне сказки не рассказывай

Нет, не пугаю, а говорю тебе добродушно.
Например @metaprog многие бы помогли, но он сумел всех отвадить …

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Частота ШИМ должна быть хотя бы 100-1000 Гц

ты забыл уточнить контекст. это как сказать, что температура должна быть 20 градусов.

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Потому что мазохистов писать под stm на ассемблере немного.

судя по твоему гитхабу у тебя и на си-то не очень весело получается, то ту костыли, то там.

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

anonymous
()
Ответ на: комментарий от anonymous

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

чем ? я читал какого вы мнения о нем.

Сейчас он изменился к много лучшему, а года полтора всех в жопу посылал.
Да, критикую его, но при этом всегда защищал его и говорил, что он талантливый разработчик.
И ни в одном топике не перешел на личности …
А критиковал @metaprog ни один я, и было за что.
Еще раз акцентирую на то, что он похоже изменился к лучшему.
Что вы так болезненно все воспринимаете?
Меня к примеру некий Владимир года два троллил и были единицы постов в которых «срывался» и говорил «не беснуйся».
Не будьте таким обидчивым.
Давно уже мои посты по отношению к вам добродушны.
Похоже и вы потихоньку меняетесь к лучшему

Рад за вас
anonymous
()
Ответ на: комментарий от Eddy_Em

тут даже не аsm.

RCC_APB2ENR = 0x40021018
RCC_APB2ENR_IOPAEN = (1 << 2)// enable IOPAEN
RCC_APB2ENR_TIM1 = (1 << 11)// enable TIM1EN
RCC_APB2ENR_AFIOEN=(1<<0) //enable AFIOEN
GPIOA_CRH = 0x40010804
TIM1_CR1 = 0x40012c00
TIM_CR1_URS = (1 << 2)
TIM_CR1_CEN = (1 << 0)
TIM1_PSC = 0x40012c28
TIM1_ARR = 0x40012c2c
TIM1_DIER = 0x40012c0c
TIM_DIER_UIE = (1 << 0)
TIM1_EGR = 0x40012c14
TIM_EGR_UG = (1 << 0)
NVIC_ISER0 = 0xe000e100
TIM1_UP = (1 << 25)
TIM1_SR = 0x40012c10
TIM_SR_UIF = (1 << 0)
GPIOA_ODR = 0x4001080C


//TIM1 =0x40012C00
//enable PWM
TIM1_CCMR1= 0x40012C18
TIM1_ССER =0x40012C20
TIM1_CR1 =0x40012c00
TIM1_BDTR =0x40012C44
Tim1_CCR1 =0x40012C34


TIM1->CC_MR1|=6<<4;  		 
TIM1->CC_MR1|=1<<3; 		 
TIM1->CC_ER|=1<<0;   		   
TIM1->BDTR|=1<<15;      			
TIM1->CR1=0x0080;   	
TIM1->CR1|=0x01;    	 			
TIM1->CC_R1 =255;
Что еще надо для работы ШИМ на ноге А8 от таймер TIM1 ?

Assembler
() автор топика
Ответ на: комментарий от anonymous

всех в жопу посылал
Сейчас он изменился к много лучшему

может он изменился потому что вы тут немного изменились к лучшему? может не просто так он посылал тут некоторых? может у них ЧСВ раздулось они потеряли ориентир? критика всегда хорошо, если она здоровая. вы по МК можете что-то сказать? или мы будет о возвышенном? но об возвышенном хорошо думать а не говорить. давайте лучше об МК. спрошу совсем просто. что нужно дописать в этом примере от Anonymous

.syntax unified
.cpu cortex-m3
.thumb

RCC_APB2ENR = 0x40021018
RCC_APB2ENR_IOPCEN = (1 << 4)
RCC_APB2ENR_TIM1EN = (1 << 11)

GPIOC_CRH = 0x40011004

TIM1_CR1 = 0x40012c00
TIM_CR1_URS = (1 << 2)
TIM_CR1_CEN = (1 << 0)

TIM1_PSC = 0x40012c28
TIM1_ARR = 0x40012c2c

TIM1_DIER = 0x40012c0c
TIM_DIER_UIE = (1 << 0)

TIM1_EGR = 0x40012c14
TIM_EGR_UG = (1 << 0)

NVIC_ISER0 = 0xe000e100
TIM1_UP = (1 << 25)

TIM1_SR = 0x40012c10
TIM_SR_UIF = (1 << 0)

GPIOC_ODR = 0x4001100c

.text
	.word   0x20002000
	.word   _start + 1
	.space  0x9c
	.word   TIM1_UP_isr + 1

.global _start
_start:
	ldr    r0, =RCC_APB2ENR
	ldr    r1, [r0]
	orr    r1, #(RCC_APB2ENR_TIM1EN | RCC_APB2ENR_IOPCEN)
	str    r1, [r0]

	ldr    r0, =GPIOC_CRH
	ldr    r1, [r0]
	and    r1, #0xFF0FFFFF
	orr    r1, #0x00100000
	str    r1, [r0]

	ldr    r0, =TIM1_CR1
	ldr    r1, =TIM_CR1_URS
	str    r1, [r0]

	ldr    r0, =TIM1_PSC
	ldr    r1, =1000
	str    r1, [r0]

	ldr    r0, =TIM1_ARR
	ldr    r1, =2000
	str    r1, [r0]

	ldr    r0, =TIM1_DIER
	ldr    r1, =TIM_DIER_UIE 
	str    r1, [r0]

	ldr    r0, =TIM1_EGR
	ldr    r1, =TIM_EGR_UG
	str    r1, [r0]

	dsb

	ldr    r0, =TIM1_CR1
	ldr    r1, =TIM_CR1_CEN
	str    r1, [r0]

	ldr    r0, =NVIC_ISER0
	ldr    r1, =TIM1_UP
	str    r1, [r0]

loop:
	wfi
	b loop

.global TIM1_UP_isr
TIM1_UP_isr:
	ldr    r0, =TIM1_SR
	ldr    r1, [r0]
	bic    r1, #TIM_SR_UIF
	str    r1, [r0]

	ldr    r0, =GPIOC_ODR
	ldr    r1, [r0]
	eor    r1, #(1 << 13)
	str    r1, [r0]

	bx lr

 
чтобы вплести сюда еще и  ШИМ ?  давайте по делу господа. 
Assembler
() автор топика
Ответ на: комментарий от anonymous

судя по твоему гитхабу у тебя и на си-то не очень весело получается, то ту костыли, то там.

Что-то я не увидел там ваших пулреквестов с исправлениями.

а ты, кстати, почему эдика не упоминаешь в соавторах?

Потому что он и не является соавтором. То, что при написании своего кода я смотрел в его код, в код ST-HAL, в код opencm3, в десяток других источников со всего интернета, не требует добавлять в соавторы вообще всех.

COKPOWEHEU
()
Ответ на: комментарий от Assembler

Потому что мазохистов писать под stm на ассемблере немного.

сейчас это не требуется. чистая теория.

Не требуется что? Писать на ассемблере? Так и не пишут, чему вы удивляетесь

на Си гораздо нагляднее получается.

для кого?

Для чтения, очевидно. То, что на ассемблере выглядит как три-пять строчек танцев вокруг регистров на Си разворачивается в одно присваивание.

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

А толку кидать вам хоть документацию, хоть примеры. Все равно ведь не читаете. Хотя казалось бы, что сложного открыть поисковик, ввести там «stm32f103 pwm cmsis» и читать начиная с первой же ссылки. Сверяясь с рефманом, разумеется, чтобы понять какой бит для чего используется в данном случае.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Что-то я не увидел там ваших пулреквестов с исправлениями.

и не увидишь.

при написании своего кода я смотрел в его код

и копировал через ctrl+c и ctrl+v. очевидно же. вот и получается, что какую-то часть в твоей репе написал эдик (если он тоже ни у кого не спёр, конечно).

anonymous
()
Ответ на: комментарий от COKPOWEHEU

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

а то, что на си выглядит как откровенная наркомания на асме вообще не требует никаких усилий:

config_descriptor:
    .byte   cd_size
    .byte   2
    .2byte  cd_total_sz
    ...
cd_size = . - config_descriptor

interface_descriptor:
    ...
endpoint_descriptor:
   ...

cd_total_sz = . - config_descriptor

тебе, вот, например, ни си ни даже его макросы красиво писать не помогают. может быть дело не в инструменте?

anonymous
()
Ответ на: комментарий от anonymous

и не увидишь.

И не сомневался. Анонимусы только чушь нести горазды.

и копировал через ctrl+c и ctrl+v. очевидно же.

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

COKPOWEHEU
()
Ответ на: комментарий от anonymous

а то, что на си выглядит как откровенная наркомания на асме вообще не требует никаких усилий:

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

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

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

anonymous
()
Ответ на: комментарий от Eddy_Em

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

static volatile uint32_t blink_ctr = 0;

void sys_tick_handler(void){
  ++blink_ctr;
}

void main(){
  uint32_t loc_ctr = 0;
  uint32_t TLow = 1, TTot = 100, inc = 1;
  uint8_t Pnow = 0;
...
  while(1){
    if(Pnow){
      if(blink_ctr - loc_ctr >= TTot-TLow){
        Pnow = 0; clear(LED);
        loc_ctr = blink_ctr;
      }
    }else{
      if(blink_ctr - loc_ctr >= TLow){
        Pnow = 1; set(LED);
        loc_ctr = blink_ctr;
        TLow += inc;
        if(TLow < 1 || TLow > TTot - 1) inc = -inc;
      }
  }
...
}
как я должен расшифровать? ни адресов, ни значений. я думал вы хотите помочь.

Assembler
() автор топика
Ответ на: комментарий от COKPOWEHEU

Не требуется что?

не требуется чтобы объяснить.

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

 вы только говорите
 

зашли чтобы сказать, что надо нагуглить и читать маны? или зашли чтобы посмотреть что напишет Эдуард? вас попросили помочь разобраться как включить ШИМ, вы начали извиваться и выкручиваться. пишите какую-то чушь ради звоздочки. тот еще вы будете здесь товарищ.

Assembler
() автор топика
Ответ на: комментарий от Assembler

А что здесь расшифровывать? Это - тупой blink с переменной скважностью: сначала продолжительность темных промежутков возрастает (а светлых - убывает), потом — наоборот.

Здесь только 2 макроса определить надо: set(LED) и clear(LED). В C можно сделать так:

#define LED0_port   GPIOB
#define LED0_pin    (1<<9)
#define LED1_port   GPIOB
#define LED1_pin    (1<<10)

#define set(x)    pin_clear(x ## _port, x ## _pin)
#define clear(x) pin_set(x ## _port, x ## _pin)
сами макросы set/clear и т.п. у меня в общей куче объявлены:
#define pin_toggle(gpioport, gpios)  do{  \
    register uint32_t __port = gpioport->ODR;  \
    gpioport->BSRR = ((__port & gpios) << 16) | (~__port & gpios);}while(0)

#define pin_set(gpioport, gpios)  do{gpioport->BSRR = gpios;}while(0)
#define pin_clear(gpioport, gpios) do{gpioport->BSRR = ((gpios) << 16);}while(0)
#define pin_read(gpioport, gpios) (gpioport->IDR & (gpios) ? 1 : 0)
#define pin_write(gpioport, gpios)  do{gpioport->ODR = gpios;}while(0)
Макросы pin_set и pin_clear можно также через регистры BSR/BRR объявить (это будет даже более универсально).

А вот макрос pin_toggle, к сожалению, невозможно определить атомарной операцией. Почему-то нет в STM32 регистра BTR…

Eddy_Em ☆☆☆☆☆
()

Ты уже на достаточно простых вещах начинаешь путаться. А что будет с более сложными моментами?

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

Может, стоит таки на С перейти?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

сотни раз говорил Вам Эдуард, что не знаю СИ. Как я должен быть трактовать разбирать эти макросы. Вы же видите что немного только в адресах разобрался, и попросил вас помочь понять что нужно подключить минимально, чтобы заработал шим. Что я такого у вас спросил? пришел к вам домой что ли и постучал в дверь с просьбой объяснить? где я не уважительно к вам относся? Идите уже Эдуард, сами разберемся. Впринципе несложно.

Assembler
() автор топика
Ответ на: комментарий от Eddy_Em

Может, стоит таки на С перейти?

нет спасибо. Разберусь и на Assembler.

Assembler
() автор топика
Ответ на: комментарий от Assembler

Тогда могу разве что простым текстом писать, если С непонятен. Я в ассемблере понимаю лишь на уровне примитивных восьмибиток (бывало нужно смотреть, что там sdcc генерирует для STM8, т.к. он совершенно не умел оптимизировать и приходилось выкручиваться с ручной оптимизацией).

Чтобы самому разобраться, достаточно почитать RM на пункте PWM для выбранного таймера. Там вполне подробно расписано, что и как нужно выставлять в регистрах таймера. Ну и не забывать об альтернативных функциях и ремапе (не всегда ШИМ будет сидеть в ремапе по умолчанию).

Eddy_Em ☆☆☆☆☆
()

Итак, вкратце. Чтобы на STM32F103 запустить таймером TIM1 ШИМ на ноге PA8 (канал CC1 таймера), нужно:

  • установить ногу PA8 в режим alternate pushpull (здесь ремап по умолчанию, повезло), естественно, не забыв включить тактирование RCC_APB2ENR_AFIOEN;
  • разрешить тактирование таймера RCC_APB2ENR_TIM1EN;
  • выставить регистры таймера: PSC, ARR и CCR1;
  • задать режим работы в регистре CCMR1, например, для PWM mode 1: TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
  • разрешить main output (иначе не будет никакого выхода) и конкретный выход канала 1: TIM1->BDTR = TIM_BDTR_MOE; TIM1->CCER = TIM_CCER_CC1E;
  • включить таймер TIM1->CR1 = TIM_CR1_CEN;

Ну и при необходимости можно еще сделать TIM1->EGR |= TIM_EGR_UG.

После данных манипуляций все должно работать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

спасибо Эдуард. это все у меня было сделано. Это не вызвает вопросов. Видимо напиши вы сразу, многое было бы уже сделано. Но сейчас произошли траблы с программатором. Он просто потух. заказал. Возможно если человек оказется порядочным, то завтра я смогу снова писать чушь на Ассемблере представляя что я прогарммиист.

Assembler
() автор топика
Ответ на: комментарий от Assembler

зашли чтобы сказать, что надо нагуглить и читать маны?

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

или зашли чтобы посмотреть что напишет Эдуард?

Ну, это в любом случае полезно, он неплохо знает STM’ки.

вас попросили помочь разобраться как включить ШИМ, вы начали извиваться и выкручиваться

Неа, я вас прямым текстом послал в поисковик, даже фразу для поиска подсказал.

COKPOWEHEU
()
Ответ на: комментарий от Assembler

Чтобы прошить F103, не нужен программатор: можно ведь воспользоваться встроенным бутлоадером на USART1. Я вот редко когда прошиваю через SWD, разве что blue pill, у которой разъем уже выведен. А вот, например, F0x2 вообще через DFU шью, т.к. они все равно подключены по USB к компьютеру, а выйти в режим DFU можно программно.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Assembler

Но сейчас произошли траблы с программатором. Он просто потух.

STM’ки умеют прошиваться через UART. Выставляете BOOT0 и BOOT1 в состояния, описанные а документации, ресетите и прошиваете через stm32flash. Если переходника USB-UART нет, его стоит купить в любом случае - для разнообразной отладки. Ну и на случай новых косяков с программатором.

Кстати, я пока не спаял st-link, именно так и шил. И st-link тоже таким способом шил. Но, конечно, дергать BOOT0 неприятно, да и шьет он дольше, чем JTAG/SWD.

COKPOWEHEU
()
Ответ на: комментарий от Eddy_Em

не забыв включить тактирование RCC_APB2ENR_AFIOEN

это для ремапа, для дефолтных альтфункций (типа шима от таймера1 на pa8) оно не нужно.

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Учитесь учиться, не ждите, что вас научат.

но сами учитесь у Эдуарда.

Ну, это в любом случае полезно, он неплохо знает STM’ки.

эта единственная правда, которую вы сказали за сегодня.

даже фразу для поиска подсказал

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

но сами учитесь у Эдуарда.

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

Ладно, в отличии от вас, я не жадный. Раз Эдуард, учит, учитесь.

Чему? ШИМу, который все и так давным-давно освоили? Или bitband, который осваивается за полчаса, но даром никому не нужен кроме единичных задач?

вобщем побирайтесь, я благословляю вас.

Спасибо, но не буду отбирать у вас эту роль.

COKPOWEHEU
()
Ответ на: комментарий от Assembler

бинарник примет?

Бинарник примет точно. Эльфа не уверен, вроде бы нет.

stm32flash -w Program.bin -v -g /dev/ttyUSB0

Согласно документации, флаг -v можно не указывать, а для -g нужен адрес. Впрочем, -g тоже можно убрать. Достаточно

stm32flash -w $(frmname).bin /dev/ttyUSB0

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

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

Assembler
() автор топика
Ответ на: комментарий от Assembler

Ну в мане же написано:

File format can be either raw binary or intel hex (see below FORMAT CONVERSION).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Assembler

На PB8 нет вывода от первого таймера, там TIM4_CH3. Но ему тоже ремап не нужен, т.к. это — дефолтное положение.

Ты загляни в даташит, все будет понятно.

F103 - вообще ущербный камень. У более свежих значительно лучше периферия сделана, да и ремап по-человечески делается. В идеале было бы вообще полный ремап в МК закладывать: чтобы не мучиться на стадии трассировки печатной платы с кривым расположением ног, а рисовать так, как удобней, а потом уже ремапом все на свои места расставить.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

В идеале было бы вообще полный ремап в МК закладывать

А еще лучше в каждую периферию встраивать программируемую логику чтобы если нужно 5 UART’ов и 1 SPI, легко было переопределить.

Получится ПЛИС…

COKPOWEHEU
()
Ответ на: комментарий от Assembler

По поводу обучения на микро-чём-то.

Очевидно, что это ремесло. Очевидно, что для грамотного обучения ремеслу нужен репетитор, который «добился». Да, у таких людей нет времени. Да, они просят много денег. Можно сойтись на том, что Вам учителя удастся чем-то заинтересовать. Важен личный контакт на первые годы.

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

Важно, (любая) «качественная база» не для бедных, не для 17к среднего класса. Если Вы именно без денег (например, на ВУЗ сотку найти не можете), то лучше меняйте интересы, ИМХО.

anonymous
()
Ответ на: комментарий от anonymous

Я не занимаюсь чтением даташитов вслух! Пусть сам читает.

Чтобы научиться, сначала следует осилить Титце с Шенком, научиться паять, осилить Хоровица с Хиллом, научиться рисовать простые схемы, трассировать. Потом осилить С или С++, прочитать даташит и RM на выбранный МК, начать программировать.

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Очевидно, что для грамотного обучения ремеслу нужен репетитор, который «добился».

Очевидно, это не так. Большая часть радиолюбителей и программистов - самоучки. Да, с наставником проще, но книг и статей сейчас море. Те полтора вопроса, которые там не рассматриваются, можно и на форуме обсудить (спойлер для Ассемблера: ему до этих вопросов еще минимум год учиться).

COKPOWEHEU
()
Ответ на: комментарий от Eddy_Em

Нужно поставить перед собой реальную задачу. Скажем, сделать домашнюю метеостанцию с веб-мордой.

Важно чтобы это была не костыльная «идея ради идеи», а то, что человек действительно может и хочет сделать. Например, для контроллеров можно начать с часов или елочной гирлянды. В простейшем варианте ни то, ни другое особенных знаний не требуют, но при желании можно все усложнить. Например, для гирлянды сделать не просто перемигивание, а RGB светодиоды с плавной регулировкой яркости каждого по отдельности. Можно добавить светомузыку.

COKPOWEHEU
()
Ответ на: комментарий от anonymous

раскрутил его на инфу

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

anonymous
()

поправьте пожалуйста код, чтобы работало

15к

чтобы светодиод мигал что нужно сделать? как связать ногу PC13 c TIM1?

15к

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.