Jump to content
mr_smit

Вопросы По Coocox Coide

Recommended Posts

Думаю проблему атомарных операций следует пока опустить.

Ибо возник вопрос о прерываниях.

Решил помигать диодом с определённой точностью

void main()
{
   //-------------------------------------------------------
   //Включаем тактирование
   //RCC AHB 0x40021000
   //Порт C, APB2 0x018    value IOPCEN 0x10
   //Таймер 6, APB1 0x01c    value TIM6EN 0x10
   *(unsigned long*)(0x40021018) |= 0x10;
   *(unsigned long*)(0x4002101c) |= 0x10;
   //-------------------------------------------------------
   //Настройка выхода Порт C 8, 9
   //GPIOC    0x40011000
   //CRH    0x04
   // 8, 9 Пуш-пул 2 МГц    value 0x22
   *(unsigned long*)(0x40011004) = 0x22;
   //-------------------------------------------------------
   //Настройка таймера 6
   //TIM6        0x40001000
   //TIM6_PSC    0x28 Делитель на 24000 ( 0 - делим на единицу)
   //TIM6_ARR    0x2c Точка начала прерывания 1000
   //TIM6_DIER    0x0c Разрешаем прерывание от таймера value UIE 0x01
   //TIM6_CR1    0x00 Старт value CEN 0x01
   *(unsigned long*)(0x40001028) = 0x9c3f;
   *(unsigned long*)(0x4000102с) = 0x3e8;
   *(unsigned long*)(0x4000100с) = 0x01;
   *(unsigned long*)(0x40001000) = 0x01;
   //-------------------------------------------------------


 while(1);
}

(Это копия данного кода)

, но как определить случилось прерывание или нет. Где его искать?

В оригинале легко и просто обращаются к обработчику. Однако, непонятно откуда у него ноги растут.

Буду рад вашей помощи.

Share this post


Link to post
Share on other sites
Где его искать?
Написать обработчик. Там, где будет он, и искать прерывание :)

Странный какой-то вопрос, если честно...

Share this post


Link to post
Share on other sites

Вопрос более конкретный.

// Обработчик прерывания TIM6_DAC
void TIM6_DAC_IRQHandler(void)
{
TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
GPIOC->ODR^=(GPIO_Pin_9 | GPIO_Pin_8); //Инвертируем состояние светодиодов
}

На что реагирует данный отрезок кода? здесь

Конечно понятно, что на прерывание. (Я тоже Капитан Очевидночть).

Но чем обусловленно оно: значением бита в регистре? (Каком?, может быть TIMx_SR ?)

Edited by atrel

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

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

Подробнее

Но чем обусловленно оно
Событием, вызвавшим его.

Если от таймера (как в Вашем случае), то по его совпадению с регистром компаратора.

Share this post


Link to post
Share on other sites

механизм прерываний в STM несколько отличается от восьмибиток технически, но принцип тот же самый и вопросы весьма странные для человека с опытом

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

Флаги прерываний находятся в регистрах контроллера прерываний. На то он и контроллер )

Вот эти самые имена прописаны в библиотечных хидерах, и их можно легко отыскать (там список)

TIM6_DAC_IRQHandler

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

Есть еще 4 пустых заглушки, которые привязаны к SysTimer и всегда обязаны быть. По крайней мере для того, чтобы выполнился пустой обработчик. Можно их перегрузить, если нужен свой обработчик, а можно просто найти в одном из файлов проекта (включается стандартно) и дописать код прямо в уже готовый скелет.

И эти обработчики кстати нельзя запретить, как и запретить прерывания от SysTimer с помощью контроллера прерываний.

все элементарно, но есть некоторые тонкости

например, если будете писать на С++, надо обработчики прерываний обязательно делать extern "C"{}. Иначе они в пространстве имен не найдутся при сборке

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

еще мож чего вспомню

Edited by mail_robot

Share this post


Link to post
Share on other sites
                     

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

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

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

Устанавливаю GNU для CooCox v.2 beta (система Windows XP Professional SP3), выскакивает вот такая ошибка, и установка не может завершится. У кого какие предположения есть по этому поводу?

post-0-0-89708200-1431155584_thumb.jpg

Share this post


Link to post
Share on other sites

Проблему решил так:

Качал архив тут: https://launchpad.net/gcc-arm-embedded файл gcc-arm-none-eabi-4_9-2015q1-20150306-win32.zip

Кокос работает, Вин ХР.. В переменные среды, на всякий, прописал путь С:\GCCARM\bin

Share this post


Link to post
Share on other sites

Подскажите пожалуйста, с какой версией CoIde работает плата STM32F429-DISCO?

Спасибо

Share this post


Link to post
Share on other sites
В 25.10.2016 в 15:29, V2oD2o сказал:

Есть у кого нибудь дистрибутив кокоса? у них сайт не доступен

Если еще актуально, могу залить на облако.

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 ChaNger16ua
      Здравствуйте, недавно начал заниматься stm32, до этого занимался только Arduino/AVR. Купил себе плату с чипом STM32F103C8T6, и программатор ST-Link v2.
      Сразу же начал искать себе подходящую IDE, остановил свой выбор на CoIDE. И когда начал, проблем с загрузкой, и компиляцией программы не было, управлял всем через регистры, и радостно мигал светодиодом, но когда решил проверить как работает отладка, столкнулся с проблемой. При запуске отладки проект компилировался и загружался, но сама отладка выдавала ошибку: Cannot execute this command without a live selected thread. Перерыл весь интернет, ничего не помогло. 
      Взял уже пример с миганием светодиода из библиотеки GPIO, поменял название функции на int main, поставил return, и дописал строку которая включает SWD. Вот сам код:
      #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" int main(void) { int i; /* Initialize Leds mounted on STM32 board */ GPIO_InitTypeDef GPIO_InitStructure; /* Initialize LED which connected to PC6,9, Enable the Clock*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /* Configure the GPIO_LED pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); while (1) { /* Toggle LEDs which connected to PC6*/ GPIOC->ODR ^= GPIO_Pin_13; /* delay */ for(i=0;i<0x100000;i++); } return 0; } Запускаю, и ничего та же ошибка.
      После решил сам все не делать, а создать проект в STM32CubeMX. Делал по многим примерам(код кидать не буду он стандартный). Правильно настраивал порты, в пинах sys выставил значение Serial Debug, выставил тактирование. Кидаю проект, все правильно выставляю(папки Drivers, Src, Inc), потом в конфигурации во вкладке компилятор, выставляю переменные. Компилирую, выдает такую строку:
      Program Size: text data bss dec hex filename 0 0 0 0 0 NewMain.elf тоесть программы по сути нет, это в настройках линкера во вкладке options стоит галочка на: Use memory layout from memory window.
      Окей знаю что линкер просто не подключает нужные библиотеки и файлы, поэтому программа ничего не весит.
      Снимаю галочку, ставлю Scatter file, который сделала STM32CubeMX, запускаю.
      Дальше выдает ошибку, но не компиляции, вылазит окно Problem Occurred, нажимаю details, там такое:
      An internal error occurred during: "Building". String index out of range: -1 И все, компиляция прервана. НО если очистить проект, и потом сбилдить(либо ребилд), то работает, но заветный светодиод не моргает.
      Дальше касательно отладки, в нее не могу зайти, потому что при отладке проект компилируется, но я его не могу скомпилировать, могу перебилдить, и поэтому отладка тупо не включается, но есть я очищу проект, то отладка просто не работает.
       
      P.S перемычки на плате менял, как угодно, и с одной прошивкой и другой, не работает. Пытался освоить uVision, не пошло, куча проблем с ней, хотя уже и по гайдам делал(по нескольким), и сам все пытался. Но в итоге как не работало, так и не работает.
      Поэтому прошу помощи.
    • Guest Александр
      By Guest Александр
      Добрый день
      Проблема с оценочной платой STM32F4-DISCOVERY в части работы USART
      суть вопроса
      по USART шлется и принимается блоки данных по 3 байта (в принципе сколько угодно) при этом если подключен USB разъем ST-LINKа то все работает должным образом (данные снуют туда сюда без проблем), но при отключении USB ST-LINKа данные из платы STM32F4-DISCOVERY идут а вот принимать данные плата отказывается (естественно подаю внешнее питание +5 вольт на одноименный контакт). Если кто сталкивался с подобной проблемой прошу хотя бы направить в сторону железа или софта.
      На плате STM32F4-DISCOVERY убраны перемычки SB11(T_NRST) и SB12(T_SWO) а так же отпаян резистор R68 (MCO). Плата при этом прошивается без проблем, и стартует при внешнем питании(не от USB ST-LINKа) тоже без каких то заморочек.
      код прикладывать на данный момент не вижу смысла там все просто, при чем при подключении USB ST-LINKа программа работает.
      Проект пишется на IARe, конфигурация формируется в STM32Cube.
      Заранее спасибо за ответ
    • By oops13
      Простите, продублирую свой пост в новой теме:
      Форумчане, коллеги! Подскажите, пожалуйста. CoIDE выдает вот такую ошибку при записи во флешпамять:  Error: Connect failed, check config and cable connection. Со шнуром USB всё в порядке, ST-Link Utility установил. Но в диспетчере устройств драйвер STM32 почему-то именно в разделе дисковых устройствах отображается(в контроллерах USB его нет). На отладочной плате Discovery горит Красный светодиод. Настройки дебаггера в CoIDE прилагаю. Спасибо.

  • Сообщения

    • Зря вы так яростно набросились с критикой на @rockforweb , могу совершенно ответственно заявить- до относительно недавнего времени (двутысячные года)  в жилом фонде старой постройки (дореволюционной) использовалась именно такая система электроснабжения, на трансформаторной подстанции стоял понижающий трансформатор, у которого и первичная 3х:6 кВ и вторичные 3х220 В обмотки были соединены по схеме треугольник/треугольник. Одна из фаз вторичного треугольника была заземлена. При этом в обычную розетку приходили либо две фазы либо фаза и заземленная фаза (которая не определялась обычным индикатором). Все эти здания были архитектурным наследием ( у нас район Старого Таллина) поэтому реконструкция их системы электроснабжения была связана с таким количеством геморроя по получению всяческих разрешений на проведение работ, что до относительно недавнего времени просто откладывалась в "долгий ящик". Резюмирую- не исключаю возможность подобного положения дел у ТС, поэтому совет по подключению розетки может быть дан только специалисту  по электротехнике, который сможет разобраться в используемой у него системы электроснабжения здания.
    • Очередная доработка на Коте. https://radiokot.ru/forum/viewtopic.php?f=11&t=97550&start=2740  
    • Посмотрите здесь. http://diodnik.com/peredelka-kompyuternogo-bloka-v-zaryadnoe-na-shim-at2005b/
    • Окажите честь, ответьте на вопрос: если неисправен обратный клапан, почему насос включается чаще обычного только во время потребления, а ночью не включается совсем?
    • Набираешь в поиске, и ищешь, ищешь, ищешь.
  • Покупай!

×
×
  • Create New...