STM32 новичку в ARM что к чему
- Сообщения: 249
- Зарегистрирован: Пт май 18, 2012 23:12:23
- Реклама
Что-нибудь нужно делать чтобы это работало? Там резисторы какие впаять или конфигурацию порта какую-то особенную выставить?
Нет, ничего.
Только свериться с даташитом (pinouts), чтобы напротив названия вывода в графе "I/O structure" стояло "FT".
Только свериться с даташитом (pinouts), чтобы напротив названия вывода в графе "I/O structure" стояло "FT".
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Мда, пошарил еще раз по даташитам/интернетам и выяснил что выводы используемые уартом нифига не толерантные. Вот и получается что мне нужно или колхозить делитель или использовать 3-х вольтовую микросхему для rs485. А учитывая что MAX487 я купил от души придется колхозить ((. Слава богу что не поспешил и не включил распаянный модуль.
Даже с учётом Remap???
Быть такого не может... смотрите лучше... хоть один, но должен быть...
Быть такого не может... смотрите лучше... хоть один, но должен быть...
"Я не даю готовых решений, я заставляю думать!"(С)
- Реклама
- Сообщения: 249
- Зарегистрирован: Пт май 18, 2012 23:12:23
вы хоть уточните какой контроллер и выводы UART. У STM32F100/103/205 (подозреваю что и у других) PA9/10/PB10/PB11/PC10/PC11/PD5/PD6 обозначены как FT, и точно работают от 5Ввыводы используемые уартом нифига не толерантные
Подсоединяйте их через резисторы 1к и все будет ОК, проверено, "лишнее" напряжение останется на них.The_D писал(а):PA0-PA3
STM32F100
Это НЕ ок. Открывается защитный диод по входу, и эти 5 В через резистор и диод идут на 3.3. Если нагрузка по 3.3 В мала, то 3.3 может вырасти до 4, а то и выше.
Замеряйте своё 3.3 В питание ДО и ПОСЛЕ подключения резисторов.
Замеряйте своё 3.3 В питание ДО и ПОСЛЕ подключения резисторов.
Giggity giggity goo!
- Сообщения: 249
- Зарегистрирован: Пт май 18, 2012 23:12:23
Помогите, во время компиляции проекта в IAR вылезают такие ошибки:
в чем дело? сами файлы есть.
первая ошибка вылезает еще когда делаешь "rebuild all"
первая ошибка вылезает еще когда делаешь "rebuild all"
1. В проект включен сорц system_stm32l10x.c? startup_stm32l1xx_md.s пытается вытащить внешнюю функцию SystemInit, которую линкер чавойта не находит.
2. Аналогично. В main.c осуществляется вызов нигде не объявленной функции Delay..
2. Аналогично. В main.c осуществляется вызов нигде не объявленной функции Delay..
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Спасибо, подключил system_stm32l10x.c и одна ошибка пропала. а где delay объявляется? я перед этим делал проект вот от сюда:http://chipspace.ru/stm32-project-iar-ewarm-porty-1/ , там она то же используется, а файлы все те же подключены.
P. S. Прошу прощения за, возможно, глупые вопросы, просто я с Си только знакомлюсь, да и с МК то же
P. S. Прошу прощения за, возможно, глупые вопросы, просто я с Си только знакомлюсь, да и с МК то же
Смотрите листинг main.c. Delay(uint32_t step) объявляется в самую последнюю очередь:
Вы или прототип функции пропустили (смотрите вверху после блока дефайнов), или саму ее забыли объявить.
Код: Выделить всё
void Delay(uint32_t step)
{
while(step>>0)
{
--step;
}
}
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

вроде добавил кусок сразу после дефайнов, и в конце тот, что вы написали, не помогает. А как еще можно задержку сделать (для бегущего огонька на светодиодах)?
Скопируйте всё из main.c и сюда вставьте. Не может такого быть, чтобы прототипированная и объявленная как надо функция не обнаруживалась.
Суть не в выполнении функции задержки, а в ее названии. В данном случае важно только это.
Суть не в выполнении функции задержки, а в ее названии. В данном случае важно только это.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

упс... я не заметил, что ошибка другая появляется
Error[Pe020]: identifier "step" is undefined C:\Users\Petr\Documents\Project\LED2\main.c 80
Warning[Pe128]: loop is not reachable C:\Users\Petr\Documents\Project\LED2\main.c 80
Error[Pe020]: identifier "step" is undefined C:\Users\Petr\Documents\Project\LED2\main.c 80
Warning[Pe128]: loop is not reachable C:\Users\Petr\Documents\Project\LED2\main.c 80
Спойлер
Код: Выделить всё
#include <stm32l1xx.h>
#include <stm32l1xx_gpio.h>
#define LD_PORT GPIOB
#define LD_1 GPIO_Pin_15
#define LD_2 GPIO_Pin_14
#define LD_3 GPIO_Pin_13
#define LD_4 GPIO_Pin_12
#define LD_5 GPIO_Pin_11
#define LD_6 GPIO_Pin_10
#define LD_7 GPIO_Pin_2
#define GPIO_HIGH(a, b) a -> BSRRL = b
#define GPIO_LOW(a, b) a -> BSRRH = b
void InitPeriph(void);
void Delay(uint32_t step);
int main(void)
{
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
GPIOB->MODER |= GPIO_MODER_MODER15_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_15;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR15;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15;
GPIOB->MODER |= GPIO_MODER_MODER14_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_14;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR14;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14;
GPIOB->MODER |= GPIO_MODER_MODER13_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_13;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR13;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR13;
GPIOB->MODER |= GPIO_MODER_MODER12_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_12;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR12;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR12;
GPIOB->MODER |= GPIO_MODER_MODER11_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_11;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR11;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11;
GPIOB->MODER |= GPIO_MODER_MODER10_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_10;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR10;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10;
GPIOB->MODER |= GPIO_MODER_MODER2_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_2;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR2;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2;
while (1){
GPIO_LOW(LD_PORT, LD_7);
GPIO_HIGH(LD_PORT, LD_1);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_1);
GPIO_HIGH(LD_PORT, LD_2);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_2);
GPIO_HIGH(LD_PORT, LD_3);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_3);
GPIO_HIGH(LD_PORT, LD_4);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_4);
GPIO_HIGH(LD_PORT, LD_5);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_5);
GPIO_HIGH(LD_PORT, LD_6);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_6);
GPIO_HIGH(LD_PORT, LD_7);
Delay(0x0001FFFF);
}
void Delay(uint32_t step)
while(step>>0);
{
--step;
}
}
Последний раз редактировалось PetrB09 Вт ноя 13, 2012 20:03:08, всего редактировалось 1 раз.
Наш провайдер вообще озверел, два дня без инета на работе, так что извиняюсь премного.
Итак.
Нужно просто обращать внимание на то, что пишете, и проверять соответствие того, что пишете, синтаксису языка, на котором пишете.
Почему после оператора while точка с запятой? Куда делась скобка, открывающая функцию Delay? И куда делась скобка, закрывающая функцию main? ))
Хотя я, конечно, понимаю, что эти ошибки - от копирования чужой программы без осознания производимых действий.
А вот так сделайте.
ЗЫ. Кстати, какие-то странные шаманские манипуляции автор производит в функции Delay. Я об этом:
На кой?
Никто не знает.
Итак.
Нужно просто обращать внимание на то, что пишете, и проверять соответствие того, что пишете, синтаксису языка, на котором пишете.
Почему после оператора while точка с запятой? Куда делась скобка, открывающая функцию Delay? И куда делась скобка, закрывающая функцию main? ))
Хотя я, конечно, понимаю, что эти ошибки - от копирования чужой программы без осознания производимых действий.
А вот так сделайте.
Спойлер
Код: Выделить всё
#include <stm32l1xx.h>
#include <stm32l1xx_gpio.h>
#define LD_PORT GPIOB
#define LD_1 GPIO_Pin_15
#define LD_2 GPIO_Pin_14
#define LD_3 GPIO_Pin_13
#define LD_4 GPIO_Pin_12
#define LD_5 GPIO_Pin_11
#define LD_6 GPIO_Pin_10
#define LD_7 GPIO_Pin_2
#define GPIO_HIGH(a, b) a -> BSRRL = b
#define GPIO_LOW(a, b) a -> BSRRH = b
void InitPeriph(void);
void Delay(uint32_t step);
int main(void)
{
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
GPIOB->MODER |= GPIO_MODER_MODER15_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_15;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR15;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15;
GPIOB->MODER |= GPIO_MODER_MODER14_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_14;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR14;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14;
GPIOB->MODER |= GPIO_MODER_MODER13_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_13;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR13;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR13;
GPIOB->MODER |= GPIO_MODER_MODER12_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_12;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR12;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR12;
GPIOB->MODER |= GPIO_MODER_MODER11_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_11;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR11;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11;
GPIOB->MODER |= GPIO_MODER_MODER10_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_10;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR10;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10;
GPIOB->MODER |= GPIO_MODER_MODER2_0;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_2;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR2;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2;
while (1){
GPIO_LOW(LD_PORT, LD_7);
GPIO_HIGH(LD_PORT, LD_1);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_1);
GPIO_HIGH(LD_PORT, LD_2);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_2);
GPIO_HIGH(LD_PORT, LD_3);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_3);
GPIO_HIGH(LD_PORT, LD_4);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_4);
GPIO_HIGH(LD_PORT, LD_5);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_5);
GPIO_HIGH(LD_PORT, LD_6);
Delay(0x0001FFFF);
GPIO_LOW(LD_PORT, LD_6);
GPIO_HIGH(LD_PORT, LD_7);
Delay(0x0001FFFF);
}
}
void Delay(uint32_t step) {
while(step>>0)
{
--step;
}
}
Код: Выделить всё
while (step>>0)
Никто не знает.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Код: Выделить всё
while (step>>0)
— Не говорите мне что делать и я не скажу куда Вам идти...
Так-то да, я бы точно так же сделал. Посему и задумался - к чему эти лишние телодвижения? Результат-то один.
Верно и в самом деле опечатка.
Верно и в самом деле опечатка.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )



