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?

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

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

Да лан, на GPL неплохо бы и забить. Каждый вскукорек в её защиту, толоко дискридитирует это кривое поделие фанатиков.

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

и вспомнить чего мне тут желали. и мне непонятны ваши дейсвия

Ненужное усреднение. Так и в тупик несложно зайти в области взаимоотношений. Открою секрет – люди, штука простая. Достаточно не считать их теми, кем они не являются, и всё. И, как говориться, все флаги в гости будут к вам. Ну или, как говроиться, улыбок тебе дед Макар.

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

может он изменился потому что вы тут немного изменились к лучшему?

Точно нет. Кали юга, братан, кали юга.

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

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

Не гони. Аноны – единственные вменяемые. А чушь писать заходят реги из под анонов.

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

как я должен расшифровать?

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

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

Далее, закорешился с челиком, потом раскрутил его на инфу

Слушай, что-то ты гадкое пишешь. ТСу явно не подойдет. За год это уже понять можно . Попросить пожалуйста он может, но меркантильные потуги это не для нашей группы. Да и за все время что он тут посмотри по темам и поймешь что все его пожалуйста скорее дань хорошим манерам и ничего кроме оскорблений он тут не приобрел. Всю эту хуйню что ему пишут на форуме типа разработчиков можно найти даже в vk. Хотя vk далеко не интеллектуальный сайт. Да и пожалуйста там не просят.

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

Вы как мыши! Спросит вас помочь с кодом-все попрячутся. Но вылезут когда тишина.

Нет никаких мышей. Расслабься. Если беспокоят мыши – заведи кошку, рецепт прошлого.

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

вспомнить чего ему тут желали.

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

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

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

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

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

Смертному стоит уважать богов и будд, но не надеяться на них. Коммерческие отношения тут не уместны.

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

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

Да это же не один человек пишет. А разные. Нет тут никакой общей ели кого-то слить или обмануть.

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

Да это же не один человек пишет а разные

В том то и дело. Одна мразь это не показатель, но когда их много...

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

В том то и дело. Одна мразь это не показатель, но когда их много…

Регистрантов половину можно смело игнорировать. Скорее всего они сидят на Венде и не видели ни Си, ни тем более ассемблера в принципе. Про контроллеры вообще молчу. И приходят поглумиться и потроллить. Причём часть из них делает это из под анона.

Но часть из местных разбирается в вопросе. Из этой части помогать не все станут. Просто не охота или не интересно. И вот те кто остались – те кто нужен. Остальных можно смело игнорировать. Здесь есть функция – добавить в игнор. Даже всех анонимусов можно поместить в игнор. И тему создать с запретом на анонимный постинг. Но обычно аноны помогают. Или это реги из под анонов.

Варианты.

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

Местные, кто в курсе специфики ресурса, не стесняются добавлять в игнор, как только поймут, что собеседник не помочь пришёл. Здесь обычная практика.

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

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

Ну и зачем ты сдался в этой сфере? Это не твоё. Иди лучше на рынок торговать. Не будешь же ты каждый раз «челика раскручивать». А иначе от тебя только вред, как от паразита.

Шёл бы ты отсюда и не пачкал доброе имя Анонимуса.

anonymous
()

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

.syntax unified
.cpu cortex-m3
.thumb
 
RCC_APB2ENR = 0x40021018
GPIOC_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)
 
GPIOC_ODR =0x4001080C 
 
.text
    .word   0x20005000
    .word   _start + 1
    .space  0x9c
    .word   TIM1_UP_isr + 1
 
.global _start
_start:
    //ldr    r0, =RCC_APB2ENR
ldr r0, =0x40021018
    ldr    r1, =0b00000000000000000000100000000101 //enable TIM1, AFIOEN, IOPAEN
    str    r1, [r0]
 
 
 
    ldr    r0, =GPIOC_CRH
    ldr    r1, =0b00000000000000000000000000001001 //eanble  Alternate function output Push-pull 10 MHZ
       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, =1000
    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]
 
ldr r0, =0x40012C44
ldr r1, =0b00000000000000001100000000000000 //eanble MOE and AOE
str r1, [r0]
 
ldr r0, =0x40012C20
ldr r1, =0b00000000000000000000000000000001 //enable CC1E
str r1, [r0]
 
 
ldr r0, =0x40012C18
ldr r1, =0b0000000000000000000000000111000
str r1, [r0]
 
 
 
 
 
 
 
    ldr    r0, =TIM1_CR1
    ldr    r1, =TIM_CR1_CEN
    str    r1, [r0]
 
    ldr    r0, =NVIC_ISER0
    ldr    r1, =0b00000010000000000000000000000000 //установил  25Бит в единицу.
    str    r1, [r0]
 
loop:
    
b loop
 
 
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 << 8)
    str    r1, [r0]
 
    bx lr

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

а как сюда подключить ШИМ? чтобы он плавно мегал светодиодом?

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

до этого мне еще далеко. сейчас бы разобраться с ШИМом. два канала в TIMx_CCMR1 надо включать для этого?

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

ldr r0, =0x40012C44 ldr r1, =0b00000000000000001100000000000000 //eanble MOE and AOE

Ловите наркомана! Записывать руками все биты 32-битного числа.

а как сюда подключить ШИМ? чтобы он плавно мегал светодиодом?

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

два канала в TIMx_CCMR1 надо включать для этого?

Изложите ход мыслей, который к этому привел.


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

COKPOWEHEU
()
Последнее исправление: COKPOWEHEU (всего исправлений: 1)
Ответ на: комментарий от COKPOWEHEU

вашему одногруппнику я уже выложил готовый код

на СИ?

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

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

даже настолько пережеванная информация

вы путаете блювотину что там изложили с разжеванной информацией.

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

вы путаете блювотину что там изложили с разжеванной информацией.

разжеванной

Лол. Так и вижу картину, как кто-то жует, сплевывает, а ты это ловишь и глотаешь.

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

пожалуйста свои эротические фантазии держити при себе. Очень прошу. Тут и так грязи хватает. Вы знаете Stm32?

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

Изложите ход мыслей, который к этому привел.

я бы изложил, если бы об этом попросил человек, который хочет помочь и помогает, но когда об этом просит воришка кода, и тот кто всегда подгаживает во всем моих темах, то как-то хочется промолчать и не излагать)

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

Да. Вот пример на С для работы с ШИМ на всех каналах TIM3 и первом канале TIM1:

static inline void pwm_setup(){
    // enable clocking for tim1 & tim3
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
    // PWM mode 2
    TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0;
    TIM3->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0 |
                  TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_0;
    TIM3->CCMR2 = TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_0 |
                  TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_0;
    // frequency - 8MHz for 31kHz PWM
    TIM1->PSC = 5;
    TIM3->PSC = 5;
    // ARR for 8-bit PWM
    TIM1->ARR = 254;
    TIM3->ARR = 254;
    TIM1->CCR1 = 127;
    TIM3->CCR1 = 63; TIM3->CCR2 = 127; TIM3->CCR3 = 191; TIM3->CCR4 = 250;
    // enable main output
    TIM1->BDTR |= TIM_BDTR_MOE;
    TIM3->BDTR |= TIM_BDTR_MOE;
    // enable PWM outputs
    TIM1->CCER = TIM_CCER_CC1E;
    TIM3->CCER = TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E;
    // start timers
    TIM1->CR1 |= TIM_CR1_CEN;
    TIM3->CR1 |= TIM_CR1_CEN;
}
(сам сейчас код пишу для новой «вундервафли»)

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

Эдуарда, это круто, но еще бы разобраться в СИ. у меня есть 300Р, можете в пример что выше на Assembler прописать несколько строк, чтобы ШИМ плавно мог. У меня получается только регулировать скважность пока. То есть импульс ШИМ выдает, а вот для плавной регулировки нужно что-то еще. если это два канала, чтобы разобраться мне нужно будет много времени. допишите и дайте номер свой карты, я вас скину. найдите 7 мин свободного времени

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

Я же уже писал, что в асме (особенно под ARM) — вообще нуль! Если у тебя есть желание, можешь взять кусок кода и при помощи gcc его в асм превратить...

Про плавную регулировку ШИМа я уже говорил: нужно либо в прерывании этого же таймера (по CCx) инкремент/декремент делать значения TIMy->CCRx, либо это делать при помощи DMA, либо вообще отдельным таймером — смотря что за задача. Например, если настроить Systick на 1мс, а таймер ШИМа будет иметь бóльшую частоту, то в прерывании systick можно выполнять инкремент/декремент TIMy->CCRx. Можно таким образом даже скорость задавать и делать инкремент/декремент каждые n миллисекунд (но красивше взять другой таймер, настроить его на нужную частоту и пинать им DMA, который сможет вообще эмулировать звук! я так прикола ради делал генерирование синусоиды и пилы через RC-фильтр)

У меня на гитхабе валяется код для шаговиков (контроллер фотометра MMPP), там разгон-торможение реализованы как раз простейшим образом (пусть это и неправильно): инкремент/декремент значения в прерывании таймера.

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

Я же уже писал, что в асме

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

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

Вряд ли найдешь: ничего серьезного на асме написать не получится. Вряд ли у кого-то появится желание писать тысячи страниц кода для простых вещей.

Я же в очередной раз советую прочесть RM на выбранное семейство МК, даташит на конкретный и эррату! Ну, а еще есть уйма appnote'ов на разные темы — почитай аппноуты на работу с DMA и таймерами.

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

ну тут про серьезное и речи не было. Просто я не знаю как настроить ШИМ на плавное включение светодиода. Попросил написать пример. Даже не написать с нуля а дополнить тот пример что написал Anonymous.

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

вы путаете блювотину что там изложили с разжеванной информацией.

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

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

ну тут про серьезное и речи не было. Просто я не знаю как настроить ШИМ на плавное включение светодиода. Попросил написать пример. Даже не написать с нуля а дополнить тот пример что написал Anonymous.

Вот-вот. Сначала «просто дописать этот говнокод таймера» (учитывая, что написать с нуля в подобных ситуациях проще). Потом прерывания с выводов, потом DMA, UART, всю остальную периферию. И непременно дорабатывая тот же говнокод, и ни в коем случае вы не приложите ни малейших усилий чтобы решить свою задачу самостоятельно.

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

я буду решать как только научусь

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

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

Максимум можем накидать примеров.

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

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

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

Банальный пример - часы. Очевидно, что для простейшей реализации понадобится освоить RTC (хотя в f103 он инвалидный, но для часов сойдет), прерывания таймера для динамической индикации и опроса кнопок. Плюс само собой алгоритмы преобразования количества секунд в семисегментный формат десчтки_часов - единицы_часов - десятки_минут - единицы_минут.

Если чуть усложнить, можно добавить экономию энергии (хотя на f103 это опять же не очень полезно, но все же возможно), DMA (чтобы отображать время независимо от ядра) и внешние прерывания от кнопок.

Если еще чуть усложнить, можно добавить АЦП для измерения напряжения питания (чтобы переходить на питание от батареек и не индицировать в таком режиме время), внешний модуль RTC на какой-нибудь DS1307, для которого придется изучить I2C.

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

Можно таким образом даже скорость задавать и делать инкремент/декремент каждые n миллисекунд (но красивше взять другой таймер, настроить его на нужную частоту и пинать им DMA, который сможет вообще эмулировать звук! я так прикола ради делал генерирование синусоиды и пилы через RC-фильтр)

Ну что ты перед ним расписываешь это всё, ему не то что RC-фильтр, ему прерывание не понять.

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

можешь взять кусок кода и при помощи gcc его в асм превратить…

Что нужно Assembler’у, кроме самого gcc, чтобы откомпилировать приведённый пример?

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

Чтобы прошить? Нужна вся обвязка: CMSIS, заголовочные файлы от ST, стартап, линкер-скрипт и Makefile. Но это ему в любом случае понадобится, т.к. без правильной настройки тактирования и флеша у него МК будет в дефолтном режиме "тормознутей аврки" находиться, таймеры будут неправильно работать и т.д., и т.п. А без стартапа не будут проинициализированы переменные и таблица прерываний.

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

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

Потом сделать шахматные часы, а это уже прототип продукта.

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

Еще в качестве мотивационных примеров можно сделать калькулятор (в особо упоротом случае - программируемый).

В stm’ке довольно много памяти, так что можно сделать простенькую музыкальную открытку. При частоте 8 кГц и разрешении 8 бит объема флеша хватит на 8 секунд. Для дверного звонка сойдет. Варианты усложнения: подключить внешнюю память (SPI, I2C или вообще SD-карту); разобраться в алгоритмах сжатия.

Давно хочу сделать внешний терминал, подключаемый к компу по UART (или USB->UART) по аналогии с терминалами древности вроде vt50, vt100. Тут надо будет разобраться с дисплеем, клавиатурой (достаточно несложно подключить по PS/2, но можно и тачскрин использовать), в протоколе терминала, в ESC-последовательностях. Впрочем, за дисплей ТСу браться однозначно рано, там инициализация вырвиглазная.

ТСу пока рано, но я когда-то делал еще на AVR модель операционной системы с вытесняющей многозадачностью. Правда, так и не придумал куда ее можно применить или хотя бы продемонстрировать функциональность.

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

Да, достаточно. Добыть можно на сайте ST. Выкусить из того же «кала», например…

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

stm32f10xC8.ld
startup_stm32f10x_md.s
stm32f103xb.h
core_cm3.h
system_stm32f1xx.h

Возможно, еще какие-то понадобятся. Зависит от того, какую версию файлов найдете.

Ах да, еще конечно понадобится заклинание сборки. Что-то вроде arm-none-eabi-gcc -Tstm32f10xC8.ld -nostartfiles -mthumb -mcpu=cortex-m3 startup_stm32f10x_md.s main.c -o firmware.elf

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