Например TDA7294

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



Текущее время: Вт май 18, 2021 03:51:41

Часовой пояс: 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
Сообщений: 956
Рейтинг сообщения: 0
Нельзя миллисекундные задержки блокирующими делать! Надо разворачивать или конечные автоматы, или запускать таймер и заниматься своими делами, а как сработает прерывание таймера - выполнить требующийся короткий кусочек кода.
> CYCCNTENA
Это для микросекундных задержек, подсчет количества циклов системной шины. Только все равно строгой паузы не получится. Для строгой паузы есть таймеры.
Вот пример коротенькой паузы. Но это - блажь. Не надо так делать. Там же можно увидеть еще более грубый пример - миллисекундных пауз. Так тем более делать нельзя!

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


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

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

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

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

Не в сети
 Заголовок сообщения: 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 + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Пн ноя 18, 2019 21:36:46 
Держит паяльник хвостом

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

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

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


Вернуться наверх
 
Барьерные силовые клеммы от Degson – расширение складского ассортимента Компэл

Обновленная линейка барьерных клеммных блоков Degson, поступивших на склад Компэл, содержит широкий ряд клемм, подходящих для соединения проводников различного сечения (от 22AWG до 10AWG). Барьерные клеммные колодки сочетают в себе удобство, простоту и надежность соединения. Это достигается за счет ответственного производства и использования высококачественных материалов. Винтовые клеммные блоки барьерного типа Degson предназначены в первую очередь для коммутации в сильноточных цепях, например, в распределительных и измерительных системах.

Подробнее>>
Не в сети
 Заголовок сообщения: 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 с
}
}


Вернуться наверх
 
Вебинар «Экосистема MEAN WELL. Решения для любых задач электропитания» (20.05.2021)

Приглашаем 20 мая на вебинар, посвященный линейке поставок компании MEAN WELL и ее подходу к производству источников питания — как экосистемы продукции и услуг, которая позволяет подобрать оптимальный источник питания для любых задач электропитания. Рассмотрим весь спектр выпускаемой продукции MEAN WELL в области AC/DC-, DC/DC- и DC/AC-преобразователей с подробным разбором интересных и уникальных новинок, их применении и многое другое.

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

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

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

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


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

Карма: -17
Рейтинг сообщений: 11
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 625
Рейтинг сообщения: 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
Сообщений: 956
Рейтинг сообщения: 0
jcxz, грамотные специалисты РТОС в любую дырку не суют!

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Разобрать код STM32F103C8T6 в среде Keil uvision
СообщениеДобавлено: Вт ноя 19, 2019 12:08:19 
Друг Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 131
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3127
Рейтинг сообщения: 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 часа


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 11


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

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


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