Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

1 час назад, mail_robot сказал:

а с чего бы он вдруг подвис? Или он у вас под виндой работает?

 

1 час назад, mail_robot сказал:

Вопрос только - для чего так осторожно дуть на воду?

Ответ - от незнания. Т.к. с контроллерами пока на Вы и опыта нет, посетила, может и дурацкая мысль, но все же, что будет, если с АЦП вдруг что-то случится и он начнет выдавать, например, одни и те же значения (подвиснет каким-то странным образом), как результат устройство будет работать некорректно.

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Гость Гость сказал:

 (значения АЦП не обновляются и висят постоянно старые значения)

У Вас параллельнный интерфейс? Обычно нет. То есть АЦП по упр. сигналам шины исправно выдает данные, НО они не обновляются по тем же упр. сигналам... Странное подвисание для автомата..

Можно, конечно, предусмотреть и такой фантаситческий случай и сбрасывать АЦП, например, по RESET..

Ссылка на комментарий
Поделиться на другие сайты

В 21.02.2018 в 09:15, Гость Гость сказал:

Может кто-нибудь подсказать, как производить проверку на корректность работы АЦП? Т.е. интересует, чтобы вдруг не случилось так, что АЦП стал выдавать неправильные значения, может просто подвис (значения АЦП не обновляются и висят постоянно старые значения) или еще что-то, в результате чего все устройство стало работать неправильно. Как в таком случае правильно производить контроль?

Для начало скинь код, там может быть не автоматическое переобразование. Может быть что каналы не так выбраны, или с инжектированых снимаеш даные.

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Доброго времени суток, нашел хорошую статью Usart прием и отправка строки. Настроил на порт Usart3 перестал работать, попробовал на Usart2 перекинуть тоже не работает, как правильно переделать подскажите...

stm32-uart-spl.rar

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, mail_robot сказал:

а как ТЫ переделывал?

Скрытый текст

#include "stm32f10x.h" 

GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

	unsigned char Buffer[512];	//	Буфер
	int a,b;

void init()
{
//------------------------------------------------------------
//	UART
//------------------------------------------------------------
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//Configure GPIO pin 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;		//	Tx
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;	//	Rx
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
//	Configure UART
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_Init(USART3, &USART_InitStructure);
  USART_Cmd(USART3, ENABLE);
}

void delay(unsigned long p)
{
	while(p>0){p--;}
}

void send_Uart(USART_TypeDef* USARTx, unsigned char c)
{
	while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE)== RESET){}
		USART_SendData(USARTx, c);
}

unsigned char getch_Uart(USART_TypeDef* USARTx)
{
	while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE) == RESET){}
	return USART_ReceiveData(USARTx);
}

//	Отправка строки в USTR
void send_Uart_str(USART_TypeDef* USARTx, unsigned char *s)
{
  while (*s != 0) 
    send_Uart(USARTx, *s++);
}

//	выводим число в UART. Максимальная длина числа 6 цифр
void send_int_Uart(USART_TypeDef* USARTx,long c)
{
	unsigned long d=10000000;
	char temp,flag=0;
	if(c<0)
	{
		send_Uart(USARTx,'-');
		c=-c;
	}
	do
	{
		c=c%d;
		d=d/10;
		temp=c/d;
		if(temp!=0)
		{
			flag=1;
		}
		if(flag==1)
		{
			send_Uart(USARTx,temp+'0');
		}
	}
	while(d>1);
}

//	Читаем число (в ASCII) с UART. Максимальной длиной в 8 знаков. 
//	Завершение ввода по вводу любого не цифрового символа
long read_int_uart(USART_TypeDef* USARTx)
{
	unsigned char temp=0,index=0,flag=0;
	long value=0;
	temp=getch_Uart(USARTx);
	if(temp=='-')
	{
		flag=1;
		temp=getch_Uart(USARTx);
		index++;
	}
	do
	{
		index++;
		if((47<temp)&&(temp<58))
		{
			value=value*10+temp-48;
		}
		else
		{
			index=255;
		}
		if(index<7)
		{
			temp=getch_Uart(USARTx);
		}
	}while(index<7);
	
	
/*	while(index<7)
	{
		value=value*10+temp;
		if(flag==0)
		{
			flag=2;
		}
		else
		{
			temp=getch_Uart(USARTx);
		}
		index++;
		if((47<temp)&&(temp<58))
		{
			temp=temp-48;
		}
		else
		{
			index=255;
		}
	}*/
	if(flag==1)
	{
		value=-value;
	}
	return value;
}

//	читаем текстовую строку с UART, до ввода <enter>. Максимальная длина строки 512Байт
void read_str_uart(USART_TypeDef* USARTx,unsigned char* s)
{
	unsigned char temp;
	unsigned int index=0;
	while(index<512)
	{
		temp=getch_Uart(USARTx);
		if(temp!=13)
		{
			*s++=temp;
		}
		else
		{
			index=512;
		}
		index++;
	}
}

int main(void)
{

	init();

	while(1)
	{
			send_Uart_str(USART3,"alex-exe.ru\n");
	send_Uart_str(USART3,"Enter string\n");
	read_str_uart(USART3, Buffer);
	send_Uart_str(USART3,"Input string - ");
	send_Uart_str(USART3, Buffer);
	send_Uart(USART3,'\n');

	send_Uart_str(USART3,"Enter two numbers separated by a space\n");
	a=read_int_uart(USART3);
	b=read_int_uart(USART3);
	send_Uart_str(USART3,"a + b = ");
	send_int_Uart(USART3, a+b);
	send_Uart(USART3,'\n');
	}
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

ну так вроде ничего не забыл. А как именно "не работает"? Вообще ничего не пишет в консоли?

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

в конце концов окажется что RX/TX на свистке попутал

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Доброго времени суток, решил подключить sim800 к stm32f103c8 настроил usart3 и проверил через cp2102 Bridge Controller (USB to UART), обмен строками происходит, а вот место cp2102 подключаю sim800 ответ не получаю

#include "stm32f10x.h" 
 
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
 
    unsigned char Buffer[512];  //  Буфер
    int a,b;
 
void init()
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;      //  Tx
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;  //  Rx
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
 
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
 
  USART_Init(USART3, &USART_InitStructure);
  USART_Cmd(USART3, ENABLE);
}
 
void delay(unsigned long p)
{
    while(p>0){p--;}
}
 
void send_Uart(USART_TypeDef* USARTx, unsigned char c)
{
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE)== RESET){}
        USART_SendData(USARTx, c);
}
 
unsigned char getch_Uart(USART_TypeDef* USARTx)
{
    while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE) == RESET){}
    return USART_ReceiveData(USARTx);
}
 
//  Отправка строки в USTR
void send_Uart_str(USART_TypeDef* USARTx, unsigned char *s)
{
  while (*s != 0) 
    send_Uart(USARTx, *s++);
}
 
//  читаем текстовую строку с UART, до ввода <enter>. Максимальная длина строки 512Байт
void read_str_uart(USART_TypeDef* USARTx,unsigned char* s)
{
    unsigned char temp;
    unsigned int index=0;
    while(index<512)
    {
        temp=getch_Uart(USARTx);
        if(temp!=13)
        {
            *s++=temp;
        }
        else
        {
            index=512;
        }
        index++;
    }
}
 
int main(void)
{
 
    init();
        
    send_Uart_str(USART3, "AT");
        read_str_uart(USART3, Buffer);
    
}

 

В 02.03.2018 в 09:05, mail_robot сказал:

в конце концов окажется что RX/TX на свистке попутал

@mail_robot  ничего не попутал, просто на том камне 3 usart не было не посмотрел в док, просто поменял на stm32f103c8 все норм

Ссылка на комментарий
Поделиться на другие сайты

Инициализацию правильно провёл? Павер кей дернул? На ноге статуса то что нужно появилось? Скорость передачи правильная? Попробуй первой командой отправить "AAA\r\n".

Изменено пользователем GOR23
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Добрый день. Простой вроде бы вопрос, но оказалась дыра в знаниях). Как должна называться функция обработчика прерываний PVD в HAL. К примеру для таймера 2:

void TIM2_IRQHandler(void)
{
}

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

Ссылка на комментарий
Поделиться на другие сайты

34 minutes ago, GOR23 said:

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

В файле startup_stm32___.s

Ссылка на комментарий
Поделиться на другие сайты

@MasterElectric Детектор падения напряжения. Может генерировать прерывание когда напряжение падает ниже порога (Макс порог 2.9В). Если батарейное питание, то крайне нужная вещь.

Ссылка на комментарий
Поделиться на другие сайты

На старших моделях есть BOR (brown out reset) находится в options bytes. Получается прямой аналог фьюзов bod level на avr. Но на stm32f103 такой штуки нет. Потому приходиться мудрить с прерываниями. В моем случае это нужно из за того что работаю с микросхемами FRAM и FLASH. А они по даташиту работают до 2,7 вольт. А контроллеру то пофиг, он будет с ними работать пока не вырубиться на 2х вольтах.

Ссылка на комментарий
Поделиться на другие сайты

Ребята, подскажите, на входе АЦП установлен делитель (110кОм на 10кОм), параллельно сопротивлению 10кОм висит конденсатор на 10нФ и стабилитрон (3.9В). Подобное включение видел на некоторых схемах, в которых так защищают вход АЦП от бросков. Собрал, но значения АЦП нелинейны и чем больше увеличивается измеряемое напряжение, тем больше нелинейность. Стабилитрон убираю - все нормально. Как я понимаю, получается что стабилитрон начинает работать сразу, не дожидаясь 3.9В и чем больше входное напряжение, тем больше, как я понимаю, он "подсаживает". Подскажите, почему так?

Ссылка на комментарий
Поделиться на другие сайты

Надо периодически измерять напряжение в борт.сети автомобиля 24В, возможны броски до 200В, подскажите, насколько целесообразно дополнительно устанавливать внешние защитные диоды от бросков по входу АЦП? Делитель напряжения получается 100кОм к 10 кОм, может с такими номиналами сопротивлений делителя справится и встроенная "защита"? Правильно ли я понимаю, что в случае с использованием внешних диодов, стабилитрон, ограничивающий возможное поднятие питание контроллера в данном случае не нужен из-за большого значения R1 и более низкого выходного сопротивления стабилизатора 3.3В (LM117), т.е. сильно напряжение не поднимет? Если не использовать внешние диоды, может тогда имеет смысл увеличить делитель до 1МОм к 100кОм?

dd.gif

Ссылка на комментарий
Поделиться на другие сайты

всю эту городьбу надо ставить на входе буферного повторителя. АЦП стм-ки имеет на входе УВХ емкостного типа, шутки с которым обычно заканчиваются не очень 

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

В 17.03.2018 в 11:13, mail_robot сказал:

всю эту городьбу надо ставить на входе буферного повторителя

Проблема в том, что очень ограничен в размерах ПП, поэтому добавить ОУ не совсем представляется возможным (по-крайней мере не попадались подобные миниатюрные схемные рализации), но защитить вход все же хочется. Поставить, например, внешнюю сборку из 2-х диодов Шоттки + стабилитрон с сопротивлением по схеме выше, еще куда не шло. Хотя с делителем R1 (100кОм...150кОм) на R2 (10кОм), если я правильно посчитал, должно с головой хватить и встроенных защитных диодов в STM и стабилитрон не нужен, т.к. питание выше 4В не должно поднять при импульсе в 200В.

Изменено пользователем Денис Николев
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...