LINUX.ORG.RU

stm32f103c8/TIM3

 


0

1

Здрасьте здрасьте люди добрые. пререйду скразу к делу. денег немного осталось всего 100р. если есть у кого-то свободное время то подкорректируйте пожалуйста. хочу использовать TIM3 на ноге PB1 для понимания принципа работы этого таймера. но почему-то все происходит не так как ожидалось.

ldr r0, =0x4002101C //RCC_APB1ENR Enable TIM3
ldr r1, =0b00000000000000000000000000000010
str r1, [r0]

ldr r0, =0x40021018 //RCC_APB2ENR Enalble GPIO_B
ldr r1, =0b00000000000000000000000000001000
str r1, [r0]

ldr r0, =0x40010C00 //GPIO_CRL_PORT_B1
ldr r1, =0b00000000000000000000000000010000 //Enable PUSH_PULL_output mode 10MHz
str r1, [r0]

ldr r0, =0x4000040C //TIM3_DIER_UIE
ldr r1, =0b00000000000000000000000000000001
str r1, [r0]

ldr r0, =0x40000414 //TIM3_EGR_UG
ldr r1, =0b00000000000000000000000000000001
str r1, [r0]

ldr r0, =0x40000444 //TIM3_BDTR_AOE
ldr r1, =0b00000000000000000100000000000000
str r1, [r0]
ну и также настроил 
TIM3_PSC
TIM3_ARR
////////////////////////////////////////////////
ldr r0, =0xE000E100 //TIM3 global interrupt_NVIC
ldr r1, =0b00100000000000000000000000000000
str r1, [r0

ldr r0, =0x40000400 //TIM3_CR1_CEN_URS
ldr r1, =0b00000000000000000000000000000101
str r1, [r0]

скажите пожалуйста, что еще надо включить или что изменить чтобы TIM3 мог использоваться в коде на ноге PB1? я пытаюсь сделать blink led без ШИМа.



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

спасибо. скажите может

TIM3 global interrupt_NVIC неправильно?
хотя в адресе 0xE000E100 смещения видимо делать не надо. потому что TIM3 global interrupt имеет номер 29 а это NVIC_ISER[0] и смещения тут нет. что неправильно как вы считаете?

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

Доброе утро!

Откуда известно, что что-то пошло не так?

Могли не только в инициализации ошибиться, но и с вектором просчитаться, или ошибиться в самом обработчике.

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

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

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

что могло тут пойти нетак?

TIM3_EGR_UG

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

Ты бы привел код полностью. Где у тебя обработчик прерывания? Может он неправильно сделан.

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

=0b0010000000000000000000000000000

Он хочет видеть значение каждого бита.
Можно и так.

anonymous
()

Почему ты упорно продолжаешь постить на ЛОР? Ведь есть куча тематических форумов по МК.

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

Только здесь его не пошлют сразу, обложив горой матов :)

Пусть этот бред на изиэлектрониксе выложит. Поржу.

anonymous
()

Ничего не понял, но аватарка ваша понравилась …

Владимир

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

вот есть рабочий пример что дал когда-то Anonymous. скажите пожалуйста что в нем изменить чтобы задействовать TIM3 вместо TIM1?

.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
поменяйте пожалуйста TIM1 на TIM3

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

только на лоре еще осталась небольшое количество людей кто умеет программировать MK. я так иногда думаю. електроникс это не форум программистов.

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

Почему ты упорно продолжаешь постить на ЛОР?

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

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

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

А тут нет-нет, да и заглянет в тему грамотный анонимус.

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

как бы со злости я не ругался на форум, но один из сильнейших. тут хоть спорь хоть не спорь. ну ладно, это все слова. по таймерам можете просвятить? для TIM1 мы включаем TIM1_UP из таблицы Vector table for connectivity line devices. что надо включить для TIM3? надо ли что-то влючать из этой таблицы?

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

Пусть этот бред на изиэлектрониксе выложит. Поржу.

Так сам выложи от его имени, и ответы сюда накопипастишь. Всем хорошо. А можно и на иностранном форуме от его имени понаписать, не только у нас с МК работают.

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

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

Не очень понимаю, что именно ты пытаешься сделать. Если управлять аппаратно светодиодом с ноги PB1, то надо как минимум узнать, может ли TIM3 работать этой ногой. И если может, то дополнительно включить на эту ногу альтернативную ф-ю.

Если нет, то помимо включения прерывания таймера по overflow, надо ещё задать, собственно, саму ф-ю, которая будет использоваться в этом прерывании. И вектор прерываний определить соответственно.

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

Первое. Вообще логично, если ты пишешь что у тебя не получается, приводить пример того кода, с которым не получается, а не рабочего от другого человека.

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

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

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

Что тут надо поменять? Название функции TIM1_UP_isr заменим на TIM3_isr. Сброс флага (первые четыре строчки функции). TIM1_SR меняем на TIM3_SR. TIM3_SR = 0x40000410 (перепроверь это по документации).

Далее, смотрим строчки в «рабочем» примере

.space  0x9c
    .word   TIM1_UP_isr + 1

Тут ты в нужное место таблицы прерываний должен поместить свою функцию-обработчик TIM3_isr, вместо TIM1_UP_isr.

То есть пишешь

    .word   TIM3_isr + 1

Число после .space будет другим, смотри Reference Manual, раздел Interrupts and Events (страница 199). Получается надо

.space 0xAC

Все что я пишу перепроверь по документации! Я не проверяю на железе, сейчас не на чем.

James_Holden ★★★★
()
Последнее исправление: James_Holden (всего исправлений: 2)

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

Далее. Ты не активировал альтернативную функцию, ШИМ работать не будет!

Ну и завязывай уже с такими огромными портянками на асме, пиши на С!

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

Потому что я подписан на теги «STM32» и «микроконтроллеры», так как мне они интересны. Теги эти сделаны для удобства каста разбирающихся и заинтересованных в таких темах, однако последнее время вместо интересных и полезных тем я по этим тегам получаю лишь спам от тебя. Не разбираешься в чём-то здесь только ты.

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

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

а ты хочешь выуживать только ценную инфу?

Не разбираешься в чём-то здесь только ты.

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

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

уважаемый aнонаймус. я в теме написал что делаю прерывания в данный момент для примера без ШИМ. но мне надо понять как включить TIM3 поэтому я закинул этот пример.

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

Нет, ТС. Ты из тех, кто не шарит, но старается. Остальные не шарят, но доказать же надо

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

Число после .space будет другим, смотри Reference Manual, раздел Interrupts and Events (страница 199).

да, вы видимо все правильно поняли и судя по всему проблема в том что я неправильно выбрал из таблицы

Vector table for connectivity line devices.
для TIM1 - это TIM1_UP. а что для TIM3? если я буду знать то рассчитаю .space

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

судя по всему в этом проблема. не знаю что выбрать из таблицы . как тут сказали TIM3 global interrupt не подходит

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

Из RM:

TIM3 global interrupt — 0x0000_00B4

В асме так и пиши:

...
.org 0xb4
.word tim3_isr + 1
...

Но учти, что в пределах секции адреса должны идти по порядку.

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

как тут сказали TIM3 global interrupt не подходит

Почему не подходит? Вроде его и надо. У TIM3 нету прерывания на Update, TIM3_UP такого нету. Этот таймер проще чем TIM1. У него надо на global interrupt делать.

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

мне надо понять как включить TIM3 поэтому я закинул этот пример.

@Assembler, у Вас есть возможность отладчиком выполнить настройку и проверить, генерируется ли и как обрабатывается прерывание?

Если цель – понять, на что влияют значения в управляющих регистрах аппаратуры, то начать с отладчика может быть быстрее. И яснее, что именно работает не так, как Вы ожидали.

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

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

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

Для написания достаточно текстового редактора или тетрадки (лучше в клеточку) с карандашом.

Вам же (в обсуждаемом эксперименте) необходимо разместить подходящие слова во флешке и RAM прибора, а также настроить контроллер прерываний, таймер и GPIO.

И тут одним ассемблером не обойдёшся. Отладчик нужен или программатор или загрузчик или что-то в этом роде.

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

О всезнающий и все постигающий Anonymous. Ты словно река мудрости которая не дает иссохнуть разумом этому форуму! Скажи нам неразумным каково истинное различие между директивами org и space? Могут ли они взаимозаменять друг друга?при хамене одной на другую не вижу никокой разницы в исолнении кода. Не является ли тому причиной отладчик встроенный в программатор? С великим трепетом и нетерпением ждем твоего мудрого ответа на этот вопрос

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

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

Если посмотреть в Development по тегу «STM32», то все темы только от этого автора, начинаются со «здрасти-здрасти-люди-добрыя» и написаны с совершенно одинаковыми ошибками в подходе к проблеме, на которые ему из раза в раз указывают, а судя по тому, что ошибки повторяются снова, автор ничему не учится. Вот и какой смысл ему помогать?

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

Помогать в чём?

Автор сам ковыряется и пописывает. Иногда цитирует примеры кода из других своих тем.

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

Набивание скора?

И создание надписи в профиле.

Ну лично я тоже что-то могу полезное узнать из этих тем, пока из них советчики совсем не уйдут. Например, ранее промелькнула ссылка на статью про МК на risc-v.

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

Помогать в чём?

Автор сам ковыряется и пописывает.

Изучение контроллера методом тыка и бездумного копипаста далеко не самый эффективный способ. Собственно, для ARM это вообще не способ.

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

Например, ранее промелькнула ссылка на статью про МК на risc-v.

Надеюсь, не про gd32vf103?

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

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

Угу, про него.

Может и не будет, но интересно же, как оно там за пределами arm.

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

каково истинное различие между директивами org и space?

Лул. .space - это когда надо пропустить какое-то пространство, а .org - обозначить текущий адрес в секции. В примере:

.org 1
.space 1
anonymous1 = .
.org 2
anonymous2 = .

anonymous1 и anonymous2 укажут на одно и то же место в секции.

при хамене одной на другую не вижу никокой разницы в исолнении кода.

Если не работает ни так ни эдак, то это значит, что проблема в другом месте xD

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

Но вот практического применения у него скорее всего не будет.

По какой причине? Если их уже даже на алике продают, то явно они пользуются популярностью. И что такое «практическое применение»? Если у меня будет горшок с цветком поливать - это посчитается?

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

По какой причине? Если их уже даже на алике продают

В основном по причине меньшей раскрученности, чем stm32. Меньше документации, примеров, сообщества. Плюс именно эти скопированы с устаревшего и не самого удачного контроллера. Будь они на основе производительных F4, F7 или наоборот энергоэффективных L1, можно было попробовать взлететь.

И что такое «практическое применение»? Если у меня будет горшок с цветком поливать - это посчитается?

Единичные любительские поделки - нет, не считаются. Их ведь пилят вообще на всем подряд вплоть до linux-компьютера на ARM-процессоре, эмулированном на AVR.

А с точки зрения любителя у VF103 перед F103 особых преимуществ нет. Ну скорость чуть повыше (108 против 72), ну ассемблер поинтереснее (но какая разница, если пишут на Си).

Ах да, еще у VF103 сделали USB-host, но поломали совместимость USB-device. Не знаю хорошо это или плохо. Пока плохо: наркоманский USB от ST я еще расковырял, но доберусь ли до GD уже не уверен.

Кстати, если кому интересно. Я тут пытаюсь наколхозить удаленную разработку для них. То есть подключение по удаленке к машине, к которой подключена GD’шка плюс программатор плюс видеокамера сверху. Ну и немного стандартной периферии вроде матричной клавиатуры (уже сделана), семисегментного индикатора и пищалки на выходе таймера.

Программатор это отдельное развлечение, потому что этот камень прошиваться через самодельный stlink не хочет вообще, а через программатор на ft232 желает, но невероятно медленно. Поэтому сейчас делаю на stm32f103 устройство, которое прикидывается UART’ом для отладки, UART’ом для программирования (через stm32flash оно таки программируется!), HID для управления матричной клавиатурой и микрофоном для ввода звука с пищалки.

Основная проблема что выделенного IP у меня нет и как туда вообще подключаться я пока не представляю.

А так - может, кому-то будет любопытно потыкать этот контроллер, не покупая его.

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

ну ассемблер поинтереснее

А у тебя есть какая-нибудь хорошая ссылка на годный instruction set с примерами?

через программатор на ft232 желает, но невероятно медленно

Это который по USART шьёт через встроенный загрузчик? Я, конечно, не пробовал, но читал, что встроенный загрузчик может автодетектить скорость. Попробуй просто в настройках stm32flash указать скорость повыше, может будет быстрее шиться.

Основная проблема что выделенного IP у меня нет

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

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

https://m.youtube.com/watch?v=EYHv8eJrW2Y. Ты плодишь темы в разделе hardware подобной этой. Тебе что тут коммиссионный магазин что ли чтобы оценивать тебе железки? Замолчал бы лучше. Это еще не самая лажная из твоих тем.

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