Например TDA7294

Форум РадиоКот • Просмотр темы - Разобрать код STM32F103C8T6 в среде Keil uvision
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Вт окт 27, 2020 08:33:49

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 20:13:55 
Встал на лапы

Зарегистрирован: Пн апр 03, 2017 11:40:46
Сообщений: 89
Рейтинг сообщения: 0
Всем привет! Встала необходимость реализовать задержку в миллисекундах в микроконтроллере STM32F103C8T6. Перерыл интернет, ничего работоспособного не нашел, ни один код не работает у меня. Взял вот отсюда код задержки https://hubstub.ru/stm32/101-funkciya-z ... stm32.html, но Keil ругается. В чем может быть дело?

Изображение

Что вообще за регистры CoreDebug_DEMCR_TRCENA_Msk, DWT_CTRL_CYCCNTENA_Msk, DWT ? В даташите не нашел инфы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 21:05:03 
Вымогатель припоя

Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 681
Рейтинг сообщения: 0
Нельзя миллисекундные задержки блокирующими делать! Надо разворачивать или конечные автоматы, или запускать таймер и заниматься своими делами, а как сработает прерывание таймера - выполнить требующийся короткий кусочек кода.
> CYCCNTENA
Это для микросекундных задержек, подсчет количества циклов системной шины. Только все равно строгой паузы не получится. Для строгой паузы есть таймеры.
Вот пример коротенькой паузы. Но это - блажь. Не надо так делать. Там же можно увидеть еще более грубый пример - миллисекундных пауз. Так тем более делать нельзя!

_________________
Я на гитхабе, в ЖЖ


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 21:18:28 
Встал на лапы

Зарегистрирован: Пн апр 03, 2017 11:40:46
Сообщений: 89
Рейтинг сообщения: 0
Eddy_Em, не пойму почему до сих пор еще никто не озаботился написать нормальный рабочий код для милли - или секундных задержек? Смотришь примеры в инете, копируешь к себе в Keil, а ничего не работает, ошибки.... То библиотеки какие-то еще нужно, то регистры левые вылазят. Возникает мысль что у всех этих советчиков с "с рабочими задержками" что то с головой не в порядке, если уж рядовому начинающему прогеру не могут доступно донести инфу. Я в шоке!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Шестое юбилейное мероприятие в процессе
Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 21:36:46 
Вымогатель припоя

Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 681
Рейтинг сообщения: 0
201bazza писал(а):
почему до сих пор еще никто не озаботился написать нормальный рабочий код для милли - или секундных задержек?

Потому что универсального решения в данном случае не существует: кому-то нравится в теле main проверять счетчик времени, а потом запускать нужную процедуру, а кто-то делает все на конечных автоматах (и по сути внутри обработки состояния автомата в состоянии PAUSE выполняется та же самая процедура). Для пущей точности можно паузу таймером делать: по прерыванию при окончании счета выставляем флаг, а далее - те же самые процедуры проверки.
Тупо как абдуринщики делать блокирующую паузу в полсекунды-секунду некошерно!

_________________
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Вебинар «STM32L5. Секреты оценки энергопотребления» (05.11.2020)

Компания КОМПЭЛ приглашает 5 ноября принять участие в вебинаре, посвященном первому семейству МК STM32L5 на ядре Cortex-M33. На вебинаре будет рассказано об ошибках при расчете энергопотребления МК с помощью отладки STM32L562E-DK. Отладки STM32L562E-DK будут разыгрываться среди участников. Информация об условиях участия будет озвучена на вебинаре.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 21:47:27 
Встал на лапы

Зарегистрирован: Пн апр 03, 2017 11:40:46
Сообщений: 89
Рейтинг сообщения: 0
Eddy_Em, ну хорошо, универсального решения нет. Вы можете помочь мне код доработать?

1) файл delay1.h
#include "stdint.h"
#ifndef __uint32_t_defined
typedef unsigned int uint32_t;
# define __uint32_t_defined
#endif

#define DWT_CYCCNT *(volatile uint32_t *)0xE0001004
#define DWT_CONTROL *(volatile uint32_t *)0xE0001000
#define SCB_DEMCR *(volatile uint32_t *)0xE000EDFC

uint32_t DWT_Get(void)
{
return DWT_CYCCNT;
}
__inline
uint8_t DWT_Compare(int32_t tp)
{
return (((int32_t)DWT_Get() - tp) < 0);
}

void DWT_Delay(uint32_t us) // microseconds
{
int32_t tp = DWT_Get() + us * (8000000/1000000); // вместо 8000000 должно стоять SystemCoreClock, но тогда Keil ругается на SystemCoreClock
while (DWT_Compare(tp));
}

2) файл main.h
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "delay1.h"
#include <stdio.h>

int i;

void SendCameBit(int b)
{
DWT_Delay (320);
if (!b) GPIOC->ODR=GPIO_Pin_13;
DWT_Delay (320);
GPIOC->ODR=GPIO_Pin_13;
DWT_Delay (320);
GPIOC->ODR=0;
}

int main(void)
{
char Code [] = "100001111000011101010100";
if (!(DWT_CONTROL & 1))
{
SCB_DEMCR |= 0x01000000;
DWT_CYCCNT = 0;
DWT_CONTROL|= 1; // enable the counter
}
/* объявление инициализационной структуры (InitStructure), которая содержит все
параметры для настройки периферийного устройства в виде переменных-членов структуры */
GPIO_InitTypeDef GPIO_InitStructure;
/* подача на порт тактирования */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/* переменные-члены структуры */
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);

while (1)
{
for (int j=0;j<4;j++)
{
GPIOC->ODR=GPIO_Pin_13;
DWT_Delay (1); // вот тут программа встает и дальше не двигается. Светодиод на плате просто горит бесконечно
GPIOC->ODR=0;// посылаем стартовый импульс
for (int i=0;i<24;i++)
{
SendCameBit((int)Code [i]); // побитово перебираем и посылаем код
}
DWT_Delay (320);
}
GPIOC->ODR=0;
DWT_Delay (1000000); // сделать паузу после посылки на 1 с
}
}


Вернуться наверх
 
Управляй таймером с пикосекундным разрешением!

Для систем с цифровым управлением одним из важнейших параметров является разрешение. Чем точнее выполняется генерация и измерение сигналов, тем выше будет качество управления. Это касается таких приложений как источники питания, мощные инверторы, системы освещения, управление электродвигателями и прочие. Специально для ответственных задач компания STMicroelectronics предлагает использовать микроконтроллеры STM32 со встроенным таймером повышенного разрешения HRTIM.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 22:22:45 
Вымогатель припоя

Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 681
Рейтинг сообщения: 0
Я ж приводил пример: в начале всегда нужно обнулять счетчик:
Код:
DWT_CYCCNT = 0;

По-хорошему, надо еще выключать счетчик, когда он не используется. Но это не очень важно.
Вот еще. но у меня без этого 0xC5ACCE55 все работало.

_________________
Я на гитхабе, в ЖЖ


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 23:11:22 
Вымогатель припоя

Карма: -17
Рейтинг сообщений: 8
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 541
Рейтинг сообщения: 0
Что вообще за регистры CoreDebug_DEMCR_TRCENA_Msk, DWT_CTRL_CYCCNTENA_Msk, DWT ? В даташите не нашел инфы.
Плохо искали: http://infocenter.arm.com/help/topic/co ... l#cortexm3
Раздел "Data Watchpoint and Trace Unit".

Добавлено after 5 minutes 10 seconds:
Eddy_Em, не пойму почему до сих пор еще никто не озаботился написать нормальный рабочий код для милли - или секундных задержек?
"Нормальный рабочий код" давно уже написан. Называется он "РТОС". Ибо - грамотные программисты ПО на ARM-ах в суперлупе не пишут. 8)


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Вт ноя 19, 2019 07:16:52 
Вымогатель припоя

Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 681
Рейтинг сообщения: 0
jcxz, грамотные специалисты РТОС в любую дырку не суют!

_________________
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Бытовой пирометр АКИП-9312 – просто удобно!

Диапазон 35 °С ...42°С (температура тела) погрешность 0,3 °С
Диапазон 0 °С ...100°С (бытовая сфера) погрешность 1,0 °С
Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Вт ноя 19, 2019 12:08:19 
Друг Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 114
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3007
Рейтинг сообщения: 0
https://radiokot.ru/forum/download/file.php?id=316654

Код:
#include "stm32f10x.h"

extern uint32_t SystemCoreClock;
static uint32_t Delay_ms;

void DWT_Delay_ms(uint32_t ms)
{
    uint32_t Count = DWT->CYCCNT;
    ms = ms * Delay_ms;
    while((DWT->CYCCNT - Count) < ms);
}

int main(void)
{
    SystemCoreClockUpdate(); // Текущая тактовая частота.
    Delay_ms = SystemCoreClock / 1000;

    RCC-> APB2ENR |= RCC_APB2ENR_IOPCEN;

    GPIOC->CRH &= ~GPIO_CRH_CNF13;
    GPIOC->CRH |= GPIO_CRH_MODE13;

    CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
    DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;

    while(1)
    {
       GPIOC->ODR ^= GPIO_ODR_ODR13;
       DWT_Delay_ms(500);
    }
}


201bazza писал(а):
В чем может быть дело?
Кто вас учил писать исполняемый код в заголовочных файлах и к тому же не подключать другие заголовочные файлы где находятся объявления регистров и их битов? :shock:

201bazza писал(а):
Что вообще за регистры CoreDebug_DEMCR_TRCENA_Msk, DWT_CTRL_CYCCNTENA_Msk, DWT ? В даташите не нашел инфы.
Это из ядра ARM и не регистры, а их биты. :) Нужно подключить заголовочные файлы CMSIS.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y