STM32 новичку в ARM что к чему
- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Скорей всего, никаких. SWD для того и делали, что бы сделать лучше.
Чик например..
Чик например..
NXP i.MX7D на чистом ассемблере
Re: STM32 новичку в ARM что к чему
Кто скачал stm32cube_mx 4.14 и библиотеку для f1 1.3.1 скиньте пожалуйста на alex555cs@yandex.ru
- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
О.. хоспади, Вы до сих пор что ли не скачали? Сейчас сделаем.
Я скачал за минуту
Я скачал за минуту

NXP i.MX7D на чистом ассемблере
-
Alex_Golubev
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Re: STM32 новичку в ARM что к чему
Не могу скачать с сайта ST.com выдает SORRY, PAGE NOT FOUND. Это у меня одного или еще у кого ?
Re: STM32 новичку в ARM что к чему
Это вас судьба оберегает от трагической ошибки. 
Re: STM32 новичку в ARM что к чему
Скажите пожалуйста можно ли как то сделать чтобы работало условие
vibor=0;
switch (vibor){
case 0:
#define shtok vxod5
break;
case 4:
#define shtok vxod1
break;
}
все время берет значение vxod1
vibor=0;
switch (vibor){
case 0:
#define shtok vxod5
break;
case 4:
#define shtok vxod1
break;
}
все время берет значение vxod1
Re: STM32 новичку в ARM что к чему
Блеать, когда же вы начнете читать книги. Ну хоть что-нибудь прочитайте перед тем как начать программировать. Потому что вот эта твоя писанина - это как держать молоток не той стороной. Не той стороной, Карл!
Ладно, еще раз. define - это директива препроцессора. Препроцессор работает до компилятора и просто заменяет одни последовательности символов на другие. Поэтому твой, извиняюсь, бред, после препроцессинга превратится в:
Ладно, еще раз. define - это директива препроцессора. Препроцессор работает до компилятора и просто заменяет одни последовательности символов на другие. Поэтому твой, извиняюсь, бред, после препроцессинга превратится в:
Код: Выделить всё
vibor=0;
switch (vibor)
{
case 0:
break;
case 4:
break;
}
Re: STM32 новичку в ARM что к чему
Но можно ли как-то такое сделать по другому???
- КРАМ
- Друг Кота
- Сообщения: 25163
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
Вероятно
Код: Выделить всё
shtok =: vxodX;Re: STM32 новичку в ARM что к чему
SyncM писал(а):Но можно ли как-то такое сделать по другому???
Зависит от того как это дальше используется.
Re: STM32 новичку в ARM что к чему
vxod это какой то вход порта микроконтроллера
Re: STM32 новичку в ARM что к чему
Тогда так:
Или так:
Ну и такой вариант, посложнее:
Внимание! Выше приведен всего лишь псевдокод. Не стоит пытаться бездумно его копировать и надеяться, что он заработает. Он годится только для общего понимания идеи.
Код: Выделить всё
void do_something_with_port_1(void)
{
// Делаем действие 1 с портом 1.
// Делаем действие 2 с портом 1.
// ...
// Делаем действие N с портом 1.
}
void do_something_with_port_2(void)
{
// Делаем действие 1 с портом 2.
// Делаем действие 2 с портом 2.
// ...
// Делаем действие N с портом 2.
}
// Далее, где нужно вызываем либо первую, либо вторую функцию.
switch (vibor)
{
case 0:
do_something_with_port_1();
break;
case 4:
do_something_with_port_1();
break;
}
Или так:
Код: Выделить всё
void do_something_with_port(int vibor)
{
if (vibor== 0)
// Делаем действие 1 с портом 1.
else if (vibor== 4)
// Делаем действие 1 с портом 2.
if (vibor== 0)
// Делаем действие 2 с портом 1.
else if (vibor== 4)
// Делаем действие 2 с портом 2.
//...
if (vibor== 0)
// Делаем действие N с портом 1.
else if (vibor== 4)
// Делаем действие N с портом 2.
}
// Далее, вызываем функцию, и передаем ей "номер" порта, пускай она сама разбирается.
do_something_with_port(vibor)
Ну и такой вариант, посложнее:
Код: Выделить всё
volatile int *port_address;
switch (vibor)
{
case 0:
port_address = взять_адрес_порта(vxod5);
break;
case 4:
port_address = взять_адрес_порта(vxod1);
break;
}
// Далее работаем с конкретным адресом конкретного порта.
// ...
Внимание! Выше приведен всего лишь псевдокод. Не стоит пытаться бездумно его копировать и надеяться, что он заработает. Он годится только для общего понимания идеи.
Re: STM32 новичку в ARM что к чему
Спасибо решил так:
uint16_t pin[16]={GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3,
GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7,
GPIO_Pin_8, GPIO_Pin_9, GPIO_Pin_10, GPIO_Pin_11,
GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15};
GPIO_TypeDef* por[2]={GPIOA,GPIOB};
unsigned int shtok=pin[11];
unsigned int shtok5=por[0];
while(3){
if (GPIO_ReadInputDataBit (shtok5, shtok)==1){
String_print(10,10,"1111",Green,Black,2,2);
}
if (GPIO_ReadInputDataBit (shtok5, shtok)==0){
String_print(10,10,"1111",Red,Black,2,2);
}
}
uint16_t pin[16]={GPIO_Pin_0, GPIO_Pin_1, GPIO_Pin_2, GPIO_Pin_3,
GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_7,
GPIO_Pin_8, GPIO_Pin_9, GPIO_Pin_10, GPIO_Pin_11,
GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15};
GPIO_TypeDef* por[2]={GPIOA,GPIOB};
unsigned int shtok=pin[11];
unsigned int shtok5=por[0];
while(3){
if (GPIO_ReadInputDataBit (shtok5, shtok)==1){
String_print(10,10,"1111",Green,Black,2,2);
}
if (GPIO_ReadInputDataBit (shtok5, shtok)==0){
String_print(10,10,"1111",Red,Black,2,2);
}
}
Re: STM32 новичку в ARM что к чему
Подскажите, можно ли как-нибудь в отладчике отследить изменение флага EOC (плата STM32L-Discovery среда Keil). И второй вопрос, при флаге EOCS=0 флаг EOC должен устанавливаться только в конце всех преобразований или только после первого преобразования из группы? Нужно ли чистить флаг EOC перед самым первым запуском преобразования?
Re: STM32 новичку в ARM что к чему
Здравствуйте. У меня вопрос по тактированию STM32. Насколько я успел разобраться, предусмотрено три способа тактирования - от внешнего кварца, от внутреннего RC-генератора и с использованием множителя. При этом, если использовать внутренний RC-генератор страдает точность, до 1% при 25 градусах и более значительно (не помню цифру) при температуре от 0 до 75. Вопрос - при каких применениях эти смещения тактовой частоты скажутся на реальной работе устройства? Может, есть ещё какие-то недостатки применения внутреннего RC-генератора? Спасибо.
Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
Re: STM32 новичку в ARM что к чему
Приветствую
.
В stm32f30x.h отсутствует работа с регистрами USB. Решил добавить туда дефайны. Все поставил, но оказалось там нет описания для USB-> . Судя по другой периферии должны быть еще #define USB_BASE и #define USB. Должно быть что-то вроде:
Вот как раз этот XXXXXXXX адрес я никак и не могу найти. Может кто-нибудь подсказать где его взять и в правильном ли направлении я двигаюсь?
В stm32f30x.h отсутствует работа с регистрами USB. Решил добавить туда дефайны. Все поставил, но оказалось там нет описания для USB-> . Судя по другой периферии должны быть еще #define USB_BASE и #define USB. Должно быть что-то вроде:
Код: Выделить всё
#define USB ((USB_TypeDef *) USB_BASE)
#define USB_BASE (APB1PERIPH_BASE + 0xХХХХХХХХ)Вот как раз этот XXXXXXXX адрес я никак и не могу найти. Может кто-нибудь подсказать где его взять и в правильном ли направлении я двигаюсь?

Re: STM32 новичку в ARM что к чему
Определения для USB находятся в STM32_USB-FS-Device_Lib_Vx.x.x. Надо скачать эту библиотеку с сайта ST.
А вообще все адреса указаны в Reference Manual.
612/1096 Doc ID 13902 Rev 14
23.5 USB registers
The USB peripheral registers can be divided into the following groups:
● Common Registers: Interrupt and Control registers
● Endpoint Registers: Endpoint configuration and status
● Buffer Descriptor Table: Location of packet memory used to locate data buffers
All register addresses are expressed as offsets with respect to the USB peripheral registers
base address 0x4000 5C00, except the buffer descriptor table locations, which starts at the
address specified by the USB_BTABLE register. Due to the common limitation of APB1
bridges on word addressability, all register addresses are aligned to 32-bit word boundaries
although they are 16-bit wide. The same address alignment is used to access packet buffer
memory locations, which are located starting from 0x4000 6000.
А вообще все адреса указаны в Reference Manual.
Спойлер
Universal serial bus full-speed device interface (USB) RM0008612/1096 Doc ID 13902 Rev 14
23.5 USB registers
The USB peripheral registers can be divided into the following groups:
● Common Registers: Interrupt and Control registers
● Endpoint Registers: Endpoint configuration and status
● Buffer Descriptor Table: Location of packet memory used to locate data buffers
All register addresses are expressed as offsets with respect to the USB peripheral registers
base address 0x4000 5C00, except the buffer descriptor table locations, which starts at the
address specified by the USB_BTABLE register. Due to the common limitation of APB1
bridges on word addressability, all register addresses are aligned to 32-bit word boundaries
although they are 16-bit wide. The same address alignment is used to access packet buffer
memory locations, which are located starting from 0x4000 6000.
Re: STM32 новичку в ARM что к чему
BorisSPB писал(а):Надо скачать эту библиотеку с сайта ST.
Хочу без библиотеки сделать. Но для образца скачал и посмотрел дефайны. Нифига не понял
Может кто-нибудь помочь разобраться?Накидал по подобию в файле stm32f30x.h :
Спойлер
Код: Выделить всё
typedef struct
{
__IO uint32_t CNTR;
__IO uint32_t ISTR;
__IO uint32_t FNR;
__IO uint32_t DADDR;
__IO uint32_t BTABLE;
__IO uint32_t EP;
} USB_TypeDef;
#define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
#define APB1PERIPH_BASE PERIPH_BASE
#define USB_BASE (APB1PERIPH_BASE + 0xXXXXXXXX)
#define USB ((TIM_TypeDef *) USB_BASE)
/* ISTR interrupt events */
/******************************************************************************/
#define ISTR_CTR (0x8000) /* Correct TRansfer (clear-only bit) */
#define ISTR_DOVR (0x4000) /* DMA OVeR/underrun (clear-only bit) */
#define ISTR_ERR (0x2000) /* ERRor (clear-only bit) */
#define ISTR_WKUP (0x1000) /* WaKe UP (clear-only bit) */
#define ISTR_SUSP (0x0800) /* SUSPend (clear-only bit) */
#define ISTR_RESET (0x0400) /* RESET (clear-only bit) */
#define ISTR_SOF (0x0200) /* Start Of Frame (clear-only bit) */
#define ISTR_ESOF (0x0100) /* Expected Start Of Frame (clear-only bit) */
................................................И по поводу адреса. Как я понял, регистры разнесены от 0x4000 6000, а другие от 0x4000 5C00.
Блин, казалось все таким простым, но куда ни копни - везде ж*па...

- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Porada
Сколько знаю МК, каких-либо проблем РЦ не вызывали. Наоборот, они надёжнее - кварц потенциально ненадёжный элемент.
Но стабильность может оказаться и хуже 1%. Основной недостаток РЦ - низкая точность, вплоть до невозможности использовать протоколы, алгоритмы и интерфейсы, жёстко привязанные ко времени. Проблемы могут начаться даже на элементарном USART..
Сколько знаю МК, каких-либо проблем РЦ не вызывали. Наоборот, они надёжнее - кварц потенциально ненадёжный элемент.
Но стабильность может оказаться и хуже 1%. Основной недостаток РЦ - низкая точность, вплоть до невозможности использовать протоколы, алгоритмы и интерфейсы, жёстко привязанные ко времени. Проблемы могут начаться даже на элементарном USART..
NXP i.MX7D на чистом ассемблере
-
watchmaker
- Поставщик валерьянки для Кота
- Сообщения: 2179
- Зарегистрирован: Вс ноя 15, 2009 23:13:59
- Откуда: Харьков
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Но стабильность может оказаться и хуже 1%.
На AVR нестабильность при изменении напряжения питания 2.7..5 В нестабильность могла доходить до 5%. Так что 1% это ещё неплохо.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...