Чик например..
STM32 новичку в ARM что к чему
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
Скорей всего, никаких. SWD для того и делали, что бы сделать лучше.
Чик например..
Чик например..
NXP i.MX7D на чистом ассемблере
- Реклама
- Сообщения: 14
- Зарегистрирован: Вт окт 30, 2012 23:34:54
Кто скачал stm32cube_mx 4.14 и библиотеку для f1 1.3.1 скиньте пожалуйста на alex555cs@yandex.ru
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
О.. хоспади, Вы до сих пор что ли не скачали? Сейчас сделаем.
Я скачал за минуту
Я скачал за минуту
NXP i.MX7D на чистом ассемблере
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Не могу скачать с сайта ST.com выдает SORRY, PAGE NOT FOUND. Это у меня одного или еще у кого ?
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
- Реклама
- Сообщения: 62
- Зарегистрирован: Вт ноя 03, 2009 07:44:57
Скажите пожалуйста можно ли как то сделать чтобы работало условие
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
- Сообщения: 535
- Зарегистрирован: Вт авг 28, 2012 22:21:33
Блеать, когда же вы начнете читать книги. Ну хоть что-нибудь прочитайте перед тем как начать программировать. Потому что вот эта твоя писанина - это как держать молоток не той стороной. Не той стороной, Карл!
Ладно, еще раз. define - это директива препроцессора. Препроцессор работает до компилятора и просто заменяет одни последовательности символов на другие. Поэтому твой, извиняюсь, бред, после препроцессинга превратится в:
Ладно, еще раз. define - это директива препроцессора. Препроцессор работает до компилятора и просто заменяет одни последовательности символов на другие. Поэтому твой, извиняюсь, бред, после препроцессинга превратится в:
Код: Выделить всё
vibor=0;
switch (vibor)
{
case 0:
break;
case 4:
break;
}
- Сообщения: 62
- Зарегистрирован: Вт ноя 03, 2009 07:44:57
- Сообщения: 535
- Зарегистрирован: Вт авг 28, 2012 22:21:33
Зависит от того как это дальше используется.SyncM писал(а):Но можно ли как-то такое сделать по другому???
- Сообщения: 62
- Зарегистрирован: Вт ноя 03, 2009 07:44:57
- Сообщения: 535
- Зарегистрирован: Вт авг 28, 2012 22:21:33
Тогда так:
Или так:
Ну и такой вариант, посложнее:
Внимание! Выше приведен всего лишь псевдокод. Не стоит пытаться бездумно его копировать и надеяться, что он заработает. Он годится только для общего понимания идеи.
Код: Выделить всё
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;
}
// Далее работаем с конкретным адресом конкретного порта.
// ...
- Сообщения: 62
- Зарегистрирован: Вт ноя 03, 2009 07:44:57
Спасибо решил так:
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);
}
}
- Сообщения: 47
- Зарегистрирован: Вт мар 20, 2012 07:16:43
Подскажите, можно ли как-нибудь в отладчике отследить изменение флага EOC (плата STM32L-Discovery среда Keil). И второй вопрос, при флаге EOCS=0 флаг EOC должен устанавливаться только в конце всех преобразований или только после первого преобразования из группы? Нужно ли чистить флаг EOC перед самым первым запуском преобразования?
Здравствуйте. У меня вопрос по тактированию STM32. Насколько я успел разобраться, предусмотрено три способа тактирования - от внешнего кварца, от внутреннего RC-генератора и с использованием множителя. При этом, если использовать внутренний RC-генератор страдает точность, до 1% при 25 градусах и более значительно (не помню цифру) при температуре от 0 до 75. Вопрос - при каких применениях эти смещения тактовой частоты скажутся на реальной работе устройства? Может, есть ещё какие-то недостатки применения внутреннего RC-генератора? Спасибо.
Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Приветствую
.
В 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ХХХХХХХХ)- Сообщения: 145
- Зарегистрирован: Ср фев 01, 2012 10:55:53
Определения для 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.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Хочу без библиотеки сделать. Но для образца скачал и посмотрел дефайны. Нифига не понял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) */
............Блин, казалось все таким простым, но куда ни копни - везде ж*па...
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
Porada
Сколько знаю МК, каких-либо проблем РЦ не вызывали. Наоборот, они надёжнее - кварц потенциально ненадёжный элемент.
Но стабильность может оказаться и хуже 1%. Основной недостаток РЦ - низкая точность, вплоть до невозможности использовать протоколы, алгоритмы и интерфейсы, жёстко привязанные ко времени. Проблемы могут начаться даже на элементарном USART..
Сколько знаю МК, каких-либо проблем РЦ не вызывали. Наоборот, они надёжнее - кварц потенциально ненадёжный элемент.
Но стабильность может оказаться и хуже 1%. Основной недостаток РЦ - низкая точность, вплоть до невозможности использовать протоколы, алгоритмы и интерфейсы, жёстко привязанные ко времени. Проблемы могут начаться даже на элементарном USART..
NXP i.MX7D на чистом ассемблере
На AVR нестабильность при изменении напряжения питания 2.7..5 В нестабильность могла доходить до 5%. Так что 1% это ещё неплохо.Но стабильность может оказаться и хуже 1%.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


