STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
где-то не хватает volatile
Re: STM32 новичку в ARM что к чему
А volatile можно добавлять к функциям? или только к переменным. В отладчике увидел что прерывание по приёму байта срабатывает, а по передаче не срабатывает.. Не знаю, есть ли смысл вылаживать сюда код.
Функция приёма байта возвращает 1 если данные есть и 0 если их нету. а сам байт данных записывает через указатель
а в while(1) у меня такая строчка
Код: Выделить всё
#define BUFF_SIZE 1024 //Размер буфферов приёма и передачи
//структура для кольцевого буфера USART
typedef struct
{
uint8_t BUFFER[BUFF_SIZE]; //сам буфер
uint32_t head; //голова
uint32_t tail; //хвост
uint32_t counter; //счётчик символов, поступивших в буффер
uint32_t overflow_counter; //счётчик переполнений буффера
} Uint8_USART_BufferTypeDef;
volatile Uint8_USART_BufferTypeDef USART1_TX, USART1_RX; //буферы приема и передачи УАРТ1
volatile uint32_t tx_flag = 1; //1 - готов к передаче 0 - передаю
//********************************************************************************
//Общий вектор для приёма и передачи USART1 //
//********************************************************************************
void USART1_IRQHandler(void)
{
//Если прерывание возникло по приёму байта
if((USART1->SR & USART_SR_RXNE)!=0)
{
if(USART1_RX.counter < BUFF_SIZE)
{
USART1_RX.BUFFER[USART1_RX.tail] = USART1->DR;
USART1_RX.counter++;
USART1_RX.tail++;
if(USART1_RX.tail == BUFF_SIZE) USART1_RX.tail = 0;
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
//Если по завершению передачи
if((USART1->SR & USART_SR_TC)!=0)
{
USART1->SR &= ~USART_SR_TC; //очистить флаг
if(USART1_TX.counter > 0)
{
USART1->DR = USART1_TX.BUFFER[USART1_TX.head];
USART1_TX.counter--;
USART1_TX.head++;
if(USART1_TX.head == BUFF_SIZE) USART1_TX.head = 0;
}
else tx_flag = 1;
}
}
uint32_t USART1_getchar(uint8_t *byte)
{
if(USART1_RX.counter == 0) return 0; //ждем приёма байта
else
{
*byte = USART1_RX.BUFFER[USART1_RX.head];
USART1_RX.BUFFER[USART1_RX.head++] = 0;
USART1_RX.counter--;
if(USART1_RX.head == BUFF_SIZE) USART1_RX.head = 0;
return 1;
}
}
void USART1_putchar(uint8_t c)
{
//если сейчас HE передается байт
if( tx_flag )
{
USART1->DR = c; //записываем данные прямо в регистр
tx_flag = 0; //и обнуляем флаг
}
else
{
if(USART1_TX.counter < BUFF_SIZE)
{
__disable_irq ();
USART1_TX.BUFFER[USART1_TX.tail] = c;
USART1_TX.counter++;
USART1_TX.tail++;
if(USART1_TX.tail == BUFF_SIZE) USART1_TX.tail = 0;
__enable_irq();
}
}
}
Функция приёма байта возвращает 1 если данные есть и 0 если их нету. а сам байт данных записывает через указатель
а в while(1) у меня такая строчка
Код: Выделить всё
if( USART1_getchar(&byte) ) { USART1_putchar(byte); } //Если есть байт данных - отправляем его-же в ответ- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: STM32 новичку в ARM что к чему
Коты, помогите пожалуйста. Уже третий день бьюсь над stm32f0discovery из под EWARM. Хот ты тресни, ни как не хочет работать. При попытке загрузки программы выдает что-то типа Fatal error: This driver is only for ARM Cortex M devices. Session aborted! Я что-то напутал с flashloader-ом, но что не пойму? Кто нибудь исползует эту плату из под EWARM? Поделитесь опытом, пожалуйста.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
- oleg63m
- Друг Кота
- Сообщения: 20132
- Зарегистрирован: Чт сен 01, 2011 12:53:27
- Откуда: ТьмуТаракания. Почетный житель подмостовья
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Kvasshtain писал(а):Уже третий день бьюсь
А STK-500 уже добил?
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Re: STM32 новичку в ARM что к чему
Kvasshtain писал(а):Поделитесь опытом, пожалуйста.
Что у тебя на этих вкладках?


- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: STM32 новичку в ARM что к чему
Спасибо Dosikus за ответ
. Настраивал все как говорится здесь http://we.easyelectronics.ru/STM32/stm3 ... tarta.html
с той лишь разницей, что у меня STM32F051.
Балбес – я. Уважаемые мои Коты. У меня почему то слетела вкладка, где указывается целевое устройство. А я не посмотрел, что она слетела, хотя ее настраивал. Так что, у меня все заработало. Вот только теперь новые вопросы появились. Прочитав статьи на easyelectronics. Я попробовал сделать тоже самое (поморгать светодиодами), но только у них там все под STM32F10xxx. А у меня то – STM32F051. Скачав CMSIS, под свой контроллер я обнаружил, что у меня все по другому называется (в смысле название регистров – полей структуры). Долго куря заголовочные файлы, я тактирование на порту вроде бы запустил (хотя это я так думаю
), но как настроить порты на push-pull output я так понять и не смог. Так вот главный вопрос. Где посмотреть описание на CMSIS для моего родного STM32F051? Где лежит сея чудо PDF-ка? И где взять хотя бы элементарные примеры для F051.
. Настраивал все как говорится здесь http://we.easyelectronics.ru/STM32/stm3 ... tarta.htmlс той лишь разницей, что у меня STM32F051.
Балбес – я. Уважаемые мои Коты. У меня почему то слетела вкладка, где указывается целевое устройство. А я не посмотрел, что она слетела, хотя ее настраивал. Так что, у меня все заработало. Вот только теперь новые вопросы появились. Прочитав статьи на easyelectronics. Я попробовал сделать тоже самое (поморгать светодиодами), но только у них там все под STM32F10xxx. А у меня то – STM32F051. Скачав CMSIS, под свой контроллер я обнаружил, что у меня все по другому называется (в смысле название регистров – полей структуры). Долго куря заголовочные файлы, я тактирование на порту вроде бы запустил (хотя это я так думаю
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: STM32 новичку в ARM что к чему
Народ. Еще не подскажите что означает вот такой код:
#define A ((B *) C)
, где A,B,C – это какие то регистры STM-ки. Особенно странна комбинация символов *). Я в Сях не особо силен, и такого раньше не встречал.
И еще вопрос по поводу символов * и & после идентификатора стоящие без пробела, например a* или a&. Это просто часть названия идентификаторов, умножение или что-то еще. Спрашиваю, по тому что если они стоят до идентификатора, то первый символ это содержимое ячейки памяти, а второй – адрес переменной или константы, как я помню. Может я что-то не знаю в Сях.
#define A ((B *) C)
, где A,B,C – это какие то регистры STM-ки. Особенно странна комбинация символов *). Я в Сях не особо силен, и такого раньше не встречал.
И еще вопрос по поводу символов * и & после идентификатора стоящие без пробела, например a* или a&. Это просто часть названия идентификаторов, умножение или что-то еще. Спрашиваю, по тому что если они стоят до идентификатора, то первый символ это содержимое ячейки памяти, а второй – адрес переменной или константы, как я помню. Может я что-то не знаю в Сях.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Re: STM32 новичку в ARM что к чему
Kvasshtain писал(а):Спасибо Dosikus за ответ. Настраивал все как говорится здесь http://we.easyelectronics.ru/STM32/stm3 ... tarta.html
Забудь про ту статью , она устарела как говно мамонта .
И в данной ситуации тебе проще начать с Keil .
Создай ветку здесь http://kazus.ru/forums/forumdisplay.php?f=34 помогу .
- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: STM32 новичку в ARM что к чему
Спасибо за ссылку. Там и впрямь много интересного. И публика там вроде бы продвинутая в этих вопросах. Полазаю там маленько. Хочу еще сказать, что у меня все заработало. Я даже светодиодами смог помигать. Дальше буду глубже копать в сторону усложнения и совершенствования моих самоделок.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
- balmer
- Это не хвост, это антенна
- Сообщения: 1433
- Зарегистрирован: Вс дек 02, 2012 03:13:48
- Откуда: Калининград
Re: STM32 новичку в ARM что к чему
Kvasshtain писал(а):Может я что-то не знаю в Сях.
По видимому вы плохо понимаете что такое указатели.
(B*)C - это приведение указателя к другому типу.
&C - взятие адреса переменной.
Re: STM32 новичку в ARM что к чему
Kvasshtain, лучше будет если приведешь здесь конструкцию целиком .
Подозреваю что это дефайны определения адресов из хэдера от STM .
Подозреваю что это дефайны определения адресов из хэдера от STM .
Re: STM32 новичку в ARM что к чему
Подскажите какой уровень выходного сигнала. PA10 PA9 5 вольт или 3 вольта ?
Суда по даташиту написано FT 5 V tolerant I/O. но как его настроить ?
Код: Выделить всё
/* Configure USART1 Rx (PA10) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
/* Configure USART1 Tx (PA9) as alternate function */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);Суда по даташиту написано FT 5 V tolerant I/O. но как его настроить ?
- balmer
- Это не хвост, это антенна
- Сообщения: 1433
- Зарегистрирован: Вс дек 02, 2012 03:13:48
- Откуда: Калининград
Re: STM32 новичку в ARM что к чему
FT 5 V tolerant I/O - это входные параметры. То есть можно подать на эти пины 5V напряжение, а микросхема будет работать в штатном режиме.
Выходной сигнал - он всегда по уровню питания микросхемы в Push-Pull варианте. Можно конечно настроить PullDown и резистор к 5 V поставить внешний, но тогда будет очень медленно переключаться пин.
Выходной сигнал - он всегда по уровню питания микросхемы в Push-Pull варианте. Можно конечно настроить PullDown и резистор к 5 V поставить внешний, но тогда будет очень медленно переключаться пин.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Open-Drain наверноеbalmer писал(а):Можно конечно настроить PullDown и резистор к 5 V поставить внешний
Re: STM32 новичку в ARM что к чему
Аlex писал(а):Open-Drain наверное
Здесь, однозначно да .
Аlex писал(а): PullDown относится к настройке на вход, а не на выход.
Не у всех . У более продвинутых F4, F3, F0 имеются pullup и pulldown доступные во всех режимах.
Только не говори - накуа .
Ситуация такая :
практически полностью аппаратный выхлоп на SPI через DMA , необходимо отключать SPI по окончанию трансфера и в этот самый промежуток пины получаются висящими в воздухе . Задействовал pulldown - все шоколадно....
-
The_D
- Встал на лапы
- Сообщения: 108
- Зарегистрирован: Пт июл 06, 2012 14:28:17
- Откуда: Россия. г.Смоленск
Re: STM32 новичку в ARM что к чему
dosikus писал(а): необходимо отключать SPI по окончанию трансфера и в этот самый промежуток пины получаются висящими в воздухе . Задействовал pulldown - все шоколадно....
А еще можно предусмотреть подтяжку к земле через 10к внешний резистор. И ничего никогда в воздухе висеть не будет.
Re: STM32 новичку в ARM что к чему
The_D писал(а):
А еще можно предусмотреть подтяжку к земле через 10к внешний резистор. И ничего никогда в воздухе висеть не буде
А еще бывает что даже утечка через pulldown 10к критична(причем их 4) . И встроенную можно отключать ,
а припаянный намертво резистор попробуй, советчик.
-
The_D
- Встал на лапы
- Сообщения: 108
- Зарегистрирован: Пт июл 06, 2012 14:28:17
- Откуда: Россия. г.Смоленск
Re: STM32 новичку в ARM что к чему
1,5ма? Неужели критично? Мобильное использование?
Re: STM32 новичку в ARM что к чему
The_D писал(а):1,5ма? Неужели критично? Мобильное использование?
Типа того.
- balmer
- Это не хвост, это антенна
- Сообщения: 1433
- Зарегистрирован: Вс дек 02, 2012 03:13:48
- Откуда: Калининград
Re: STM32 новичку в ARM что к чему
Аlex писал(а):Open-Drain наверное.
Да, конечно же Open-Drain. Постараюсь больше по памяти всякой фигни не писать.
The_D писал(а):1,5ма? Неужели критично?
В современных устройствах 1.5 мА - это очень много. Это-ж можно 3-4 ОУ запитать. Или например STM32L потребляет 214 μA/MHz Run mode. То есть на частоте 4 МГц с работающим внешним кварцем как раз получится примерно 1.5 мА.