STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

я не знаю, как считать :)
4095*4095*256 = FFE00100 - в uint32 укладываемся
Контактная информация:
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

stemplar писал(а):Стоп стоп стоп.

Код: Выделить всё

i=0;
while (i<65)
{
i++;
sum=sum+volt;
}
sum=sum\64;
Можно делать и так если процессорного времени не жалко, но надо не забыть в цикле вставить ожидание. когда ADC новый результат оцифрует и положит в регистр.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

День добрый всем! Подскажите пожалуйста начинающему где моя ошибка:

Взял stm32f107 и написал в Keil следующий код:

Код: Выделить всё

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

unsigned int i=0;

void Delay(uint32_t a)
{
    uint32_t i;
    for (i=0; i<a; i++) {};
}

int main()
{
		GPIO_InitTypeDef port;
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	  GPIO_StructInit(&port);
    port.GPIO_Mode = GPIO_Mode_Out_PP;
    port.GPIO_Pin = GPIO_Pin_6;
    port.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &port);
    while(1)
		{   
			Delay(1000);
      GPIO_SetBits(GPIOB, GPIO_Pin_6);  
			Delay(1000);			
      GPIO_ResetBits(GPIOB, GPIO_Pin_6);
    } 
}
основываясь на http://microtechnics.ru/stm32-uchebnyj- ... da-vyvoda/
То есть, светодиодик на PB6 и им помигать.
Зашил при помощи Flash Loader Demo через USART.
Питание 3.3В, на AVDD тоже есть эти 3.3В. Вывод NRST через 10кОм на 3.3В, через 0.1мкФ на землю.
Но на выводе PB6 всегда 0. Что я сделал неверно?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

eess9 писал(а):основываясь на ....... Что я сделал неверно?
... а чем не устраивают примеры из самого Keil_a? папка \ARM\Board\ST ...
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

eess9 писал(а):

Код: Выделить всё

void Delay(uint32_t a)
{
    uint32_t i;
    for (i=0; i<a; i++) {};
}

Delay(1000);
Может слишком часто просто мигает? 1000 раз прокрутить пустой цикл это мало совсем, да и от частоты зависит сильно.
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

balmer писал(а):Может слишком часто просто мигает?
... в таком случае светодиод бы светился....
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

О существовании примеров Keil я просто не знал.

Осциллографом на выводе 0 с любой временной разверткой от мксек до десятков мсек.
Боюсь что у меня какая-то проблема в самом железе. +3.3В приходит на VDD6 и AVDD. На остальное цифровое питание внутри контроллера соединено и нет смысла тянуть 3.3В ко всем ногам VDD1, VDD2 и т.д. С землей тоже самое VSS6 и AVSS. NRST через 10кОм на +3.3В и через 0.1мкФ на землю. На PB6 через 300Ом светодиод катодом на землю.
Больше ни какие выводы не надо задействовать?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

Боюсь что у меня какая-то проблема в самом железе. +3.3В приходит на VDD6 и AVDD. На остальное цифровое питание внутри контроллера соединено и нет смысла тянуть 3.3В ко всем ногам VDD1, VDD2 и т.д. С землей тоже самое..
... если хотите, чтобы работало - не нужно "самодеятельности" с подключением. Когда подключите в соответствии с рекомендациями datashet_a все заработает.....
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

Кто разбирался с I2C подскажите эти две команды равнозначны I2C_GenerateSTART(_I2C, DISABLE); и I2C_GenerateSTOP(_I2C, ENABLE); ?
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

Сообщение drakon »

хочу спросить у тех кто сталкивался с такой проблемой. пишу в KEIL 4.6. при записи такого:

Код: Выделить всё

uint16_t k;
k = 'А'; //русская А
в переменную k помещается число 0xD090 вместо 0xC0. как это исправить?
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

drakon, известные грабли .
Кодировку с unicode в редакторе на ANSI сменить . В файлах исходников так же ...
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

"Всё придумано до нас!"(С)
http://caxapa.ru/357846.html
"Я не даю готовых решений, я заставляю думать!"(С)
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

Сообщение drakon »

dosikus, HHIMERA, спасибо! все заработало. кстати я все пункты кроме последнего уже когда-то проделывал для Sprint-Layout60, так что пришлось только поменять dll'ку.
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

требуется помощь и разъяснение:

Код: Выделить всё

void interrupt_init(void)
{
  NVIC_SetPriority(EXTI0_IRQn, 15); /* Назначить прерываниям от EXTI0 самый низкий проритет. */
  NVIC_EnableIRQ(EXTI0_IRQn);       /* Разрешить прерывания от EXTI0 в NVIC. */
}

void EXTI0_IRQHandler(void) {
  if (EXTI->PR & (1<<0)) { /* если произошло прерывание от EXTI0 */  
      EXTI->PR|=(1<<0);    /* В процессе обработки прерывания в регистре EXTI_PR
записью единицы необходимо сбросить флаг события вызвавшего данное прерывание.*/  
      
/*--------------------- Обработка события  EXTI0 -----------------------------*/ 
 if (GPIOA->IDR & 1) {
    for (int button = 0; button < 15; button ++ )
     flag=!flag; 
    } 
  }   
}
Здесь в данном случае настроил прерывание на кнопку PA0 платы Дискавери. В цикле for организавал задержку от дребезга, в главном цикле переключаю светодиоды в зависимости от флага(flag), но больше 15 переменной button присвоить нельзя, не пойму почему?
Если поставить 16 и более, на кнопку прерывание не реагирует, а 15 задержка маленькая заметен дребезг.
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Разве задержку антидребезга не таймером делают?
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

Код: Выделить всё

if (GPIOA->IDR & 1) {
    for (int button = 0; button < 15; button ++ )
     flag=!flag;
    } 
This. Что это вообще? 16 раз инвертировать переменную флаг?
-------
В коде какой-то бред. Я так понимаю, циклами пытались организовать задержку, и проверить, нажата ли кнопка после этой задержки. Как сказано выше, антидребезг делают таймером, и в основном на отрыв кнопки. На нажатие можно реагировать сразу, т.к. при отпущенной кнопке случайных нажатий никогда не происходит. Если же кнопка была нажата, и вдруг возвращает состояние "отпущена", то отпускание фиксируется только тогда, когда состояние стабильно возвращается в течении нескольких прерываний таймера. Никаких задержек в коде прерывания быть не должно!
Последний раз редактировалось Foks Сб июн 08, 2013 14:58:54, всего редактировалось 1 раз.
Giggity giggity goo!
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

uk8amk писал(а):Разве задержку антидребезга не таймером делают?
Да ее всем делают, только по моему программное устранение задержки - это какое-то извращение. Неужели трудно поставить на вход RC-цепочку?
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

menzoda писал(а):программное устранение задержки
Опечатка?

Программное устранение дребезга гибко настраивается, уменьшает число внешних деталей (как следствие и цену изделия), не зависит от внешних факторов (температура, etc) - по-моему, преимуществ достаточно.
Giggity giggity goo!
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

amv2000 писал(а):в данном случае настроил прерывание на кнопку PA0 платы Дискавери.
Юзать прерывания - моветон, в данном случае. STM просто привёл это как пример для знакомства с прерываниями, это не руководство к действию.
"Я не даю готовых решений, я заставляю думать!"(С)
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

menzoda писал(а):только по моему программное устранение задержки - это какое-то извращение. Неужели трудно поставить на вход RC-цепочку?
Foks писал(а): Программное устранение дребезга гибко настраивается, уменьшает число внешних деталей (как следствие и цену изделия), не зависит от внешних факторов (температура, etc) - по-моему, преимуществ достаточно.
Не спорьте... в разных случаях всё по разному будет...
"Я не даю готовых решений, я заставляю думать!"(С)
Ответить

Вернуться в «ARM»