Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Микроконтроллеры других производителей

Микроконтроллеры других производителей Все, что касается микроконтроллеров и НЕ подошло в раздел Microchip.

Ответ
 
Опции темы Опции просмотра
Старый 31.03.2016, 14:18   #151
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 42
Сообщений: 376
Вес репутации: 243/21
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

ну так и было изначально и оно работает... а то что напутал 0x80 и 0x08 так это фигня, я ж свои константы воткнул которые используются в других местах...

теперь у меня другая проблема - в общем бут работает и записывает новую прошивку без проблем. так же там есть функция затереть все с определенного адреса (т.е. просто в цикле бежит по страницам и вызывает EraseSector () ) - и вот это цикловое стирание не работает... т.е. я стартую бут и говорю ему сотри нафиг все, смотрю адреса все вернные 0x1000 - адрес откуда начать, и 0x7000 - сколько стереть, а процедура уже сама по страничкам стирает... по факту - ничего не стирает... но если бы стирание не работало то и прошивка не заливалась бы... в чем секрет?

есс-но erase вызывается с параметром 0x08000000+address

Код:
/*
*  Erase Sector in Flash Memory
*    Parameter:      adr:  Sector Address
*    Return Value:   0 - OK,  1 - Failed
*/
 
int EraseSector (unsigned long adr) {
 
  FLASH->SR  |= FLASH_ERR;                              // Reset Error Flags
 
  FLASH->CR  |=  FLASH_PER;                             // Page Erase Enabled 
  FLASH->AR   =  adr;                                   // Page Address
  FLASH->CR  |=  FLASH_STRT;                            // Start Erase
 
  while (FLASH->SR  & FLASH_BSY) {
    IWDG->KR = 0xAAAA;                                  // Reload IWDG
  }
 
  FLASH->CR  &= ~FLASH_PER;                             // Page Erase Disabled 
 
  if (FLASH->SR & FLASH_ERR) {                          // Check for Errors
    FLASH->SR |= FLASH_ERR;
    return (1);                                         // Failed
  }
 
  return (0);                                           // Done
}
 
uchar ERASE_FLASHROM(word FLASH_Adress, word len ) {
                int res;
                // len - Должно быть кратно 64;
                
                if (len < 1024) len = 1024;
                
                while (len) {       
                               res = EraseSector(FLASH_START_ADDR + FLASH_Adress);
                               if (res) 
                                               return 1;
                               FLASH_Adress += 0x0400;
                               if (len < 0x0400) 
                                               len = 0;
                               else 
                                               len -= 0x0400;
                }
                return 0;
}
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 31.03.2016, 20:30   #152
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 49
Сообщений: 202
Вес репутации: 211/9
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Вопрос? Прошивки разные заливаете или одну и туже? Если одну и туже попробуйте стереть и залить другую прошивку, тогда и будет ясно стирается все или нет. И еще такой момент, насколько я помню flash в ST нельзя стирать по ячейкам, только страницами.... Поправьте если я что то упустил или не понял о какой flash идет речь.
diger67 вне форума   Ответить с цитированием
Старый 01.04.2016, 10:44   #153
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 42
Сообщений: 376
Вес репутации: 243/21
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

утром дошло до меня, что я делал флеш унлок при записи сектора, т.е. код был такой что если текущий адрес равный адрес программы пользователя то сделать унлок. а при стирании этот код есс-но не вызывался... щас переделываю... штатно то 2 дня лью через бут и все адекватно, хоть программа и одна и та же
__________________
STM32F042
PIC18F25k80

Последний раз редактировалось hfmscan; 01.04.2016 в 10:51.
hfmscan вне форума   Ответить с цитированием
Старый 01.04.2016, 16:15   #154
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 42
Сообщений: 376
Вес репутации: 243/21
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Сегодня попробовал сделать прерывания в проекте, на основе кода таймера который тикает раз в секунду SysTicks, ну в общем если в проекте есть вызов SysTick_Config() то прога виснет... тады я скопировал текст функции что рекомендуют по ссылке но есс-но не компилится у меня, ругается на все функции __HAL_
что делать?

Код:
void Remap_Table(void)
{
    // Copy interrupt vector table to the RAM.
    volatile uint32_t *VectorTable = (volatile uint32_t *)0x20000000;
    uint32_t ui32_VectorIndex = 0;

    for(ui32_VectorIndex = 0; ui32_VectorIndex < 48; ui32_VectorIndex++)
    {
        VectorTable[ui32_VectorIndex] = *(__IO uint32_t*)((uint32_t)FIRMWARE_START_ADDR + (ui32_VectorIndex << 2));
    }

    __HAL_RCC_AHB_FORCE_RESET();

    //  Enable SYSCFG peripheral clock
    __HAL_RCC_SYSCFG_CLK_ENABLE();

    __HAL_RCC_AHB_RELEASE_RESET();

    // Remap RAM into 0x0000 0000
    __HAL_SYSCFG_REMAPMEMORY_SRAM();
}
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 01.04.2016, 19:03   #155
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,125
Вес репутации: 2885/97
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Это не "функции" - это макросы. Даже не смотря в код проекта это видно. Смотришь эти макросы, что они делают и если не нравится что-то, то по-своему переписываешь. Или же так готовыми и юзаешь.
AleksBak вне форума   Ответить с цитированием
Старый 01.04.2016, 19:40   #156
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 49
Сообщений: 202
Вес репутации: 211/9
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Вот блин, все в кучу и CMSIS и HAL. Да по любасу макросы и функции от библиотек SPL и HAL без их подключения к проекту работать не будут. Вы определитесь или вы тупо работаете с регистрами на прямую в CMSIS и весь геморой описания макросов и функциий берете на себя. Или подключаете "говнолибы" и пользуетесь благами готовых решений, конечно и там бывают закавыки, но гораздо реже чем у доморощенных профи и проповедников правильного образа программирования. А главное используя SPL или HAL вы не лишаете себя возможности пользоваться CMSIS.

Последний раз редактировалось diger67; 01.04.2016 в 19:45.
diger67 вне форума   Ответить с цитированием
Старый 01.04.2016, 20:50   #157
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 42
Сообщений: 376
Вес репутации: 243/21
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Если это макросы, можете дать мне их просто? я их воткну и вопрос решен (или они тянут за собой что то?)... у меня проект работает, просто если мне нужны будут в будущем прерывания то нужно переносить вектора прерываний и видимо еще что-то.. я нуб в этом деле... без прерываний работает замечательно....
Спасибо за поддержку!

PS: в папке с кейлом я искал файлы с расширением *.c и *.h со словом __HAL но не нашел ничего, куба у меня нет...
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 01.04.2016, 21:48   #158
diger67
Senior Member
 
Регистрация: 18.03.2016
Возраст: 49
Сообщений: 202
Вес репутации: 211/9
diger67 has a spectacular aura aboutdiger67 has a spectacular aura aboutdiger67 has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Цитата:
Сообщение от hfmscan Посмотреть сообщение
Если это макросы, можете дать мне их просто? я их воткну и вопрос решен (или они тянут за собой что то?)... у меня проект работает, просто если мне нужны будут в будущем прерывания то нужно переносить вектора прерываний и видимо еще что-то.. я нуб в этом деле... без прерываний работает замечательно....
Спасибо за поддержку!

PS: в папке с кейлом я искал файлы с расширением *.c и *.h со словом __HAL но не нашел ничего, куба у меня нет...
HAL - это последний крик ST. Ваш Гуру Пусикэт, взорвется при одном упоминании кроме чего то как CMSIS. Как писали многие, устанавливаем Cube от ST, создаем новый проект, инициализацию необходимой периферии, жмакаем создать. Если нет библиотеки HAL выбранного кристалла автоматом предлагает установить. Далее открывает основу проекта в выбранной среде разработки. Вот тут начинаем изучать программирование высокого уровня, т.е. HAL.
diger67 вне форума   Ответить с цитированием
Старый 01.04.2016, 23:00   #159
Pasha_Bi
Senior Member
 
Регистрация: 24.07.2009
Адрес: г. Иваново
Возраст: 42
Сообщений: 256
Вес репутации: 617/37
Pasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to allPasha_Bi is a name known to all
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Я пока загрузчик не пробовал, но задумываюсь. Правильно ли я понимаю, что в пользовательской программе (программе, которую зашиваем загрузчиком) сдвиг векторов выполняем регистром SCB->VTOR? И всё?
Pasha_Bi вне форума   Ответить с цитированием
Старый 02.04.2016, 12:35   #160
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,478
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

hfmscan, в понедельник помогу. Не слушай дигера только.
dosikus вне форума   Ответить с цитированием
Старый 04.04.2016, 08:58   #161
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,478
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Код:
#define __AHB_FORCE_RESET __HAL_RCC_AHB_FORCE_RESET
#define __AHB_FORCE_RESET()     (RCC->AHBRSTR = 0xFFFFFFFF)
Код:
#define __SYSCFG_CLK_ENABLE __HAL_RCC_SYSCFG_CLK_ENABLE
#define __SYSCFG_CLK_ENABLE()  (RCC->APB2ENR |= (RCC_APB2ENR_SYSCFGEN))
Код:
#define __AHB_RELEASE_RESET __HAL_RCC_AHB_RELEASE_RESET
#define __AHB_RELEASE_RESET()   (RCC->AHBRSTR = 0x00)
Код:
#define __HAL_REMAPMEMORY_SRAM                __HAL_SYSCFG_REMAPMEMORY_SRAM
#if defined(SYSCFG_CFGR1_MEM_MODE_0) && defined(SYSCFG_CFGR1_MEM_MODE_1)
/** @brief  Embedded SRAM mapped at 0x00000000
  */
#define __HAL_REMAPMEMORY_SRAM()         do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE); \
                                             SYSCFG->CFGR1 |= (SYSCFG_CFGR1_MEM_MODE_0 | SYSCFG_CFGR1_MEM_MODE_1); \
                                            }while(0) 
#endif /* SYSCFG_CFGR1_MEM_MODE_0 && SYSCFG_CFGR1_MEM_MODE_1 */
Вот такое г***ще этот хал-кал...
dosikus вне форума   Ответить с цитированием
Старый 04.04.2016, 13:03   #162
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 42
Сообщений: 376
Вес репутации: 243/21
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Спасибо, но что-то не пашет все равно (виснет если заделано прерывание по систик)

Код:
#define __HAL_RCC_AHB_FORCE_RESET()     (RCC->AHBRSTR = 0xFFFFFFFF)
 
#define __HAL_RCC_SYSCFG_CLK_ENABLE()  (RCC->APB2ENR |= (RCC_APB2ENR_SYSCFGEN))
 
#define __HAL_RCC_AHB_RELEASE_RESET()   (RCC->AHBRSTR = 0x00)
 
#define __HAL_SYSCFG_REMAPMEMORY_SRAM()         do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE); \
                                             SYSCFG->CFGR1 |= (SYSCFG_CFGR1_MEM_MODE_0 | SYSCFG_CFGR1_MEM_MODE_1); \
                                            }while(0)
 
void Remap_Table(void) {
    // Copy interrupt vector table to the RAM.
    volatile uint32_t *VectorTable = (volatile uint32_t *)0x20000000;
    uint32_t ui32_VectorIndex = 0;

    for(ui32_VectorIndex = 0; ui32_VectorIndex < 48; ui32_VectorIndex++)
    {
        VectorTable[ui32_VectorIndex] = *(__IO uint32_t*)((uint32_t)MAIN_PROG_ADDR + (ui32_VectorIndex << 2));
    }

    __HAL_RCC_AHB_FORCE_RESET();

    //  Enable SYSCFG peripheral clock
    __HAL_RCC_SYSCFG_CLK_ENABLE();

    __HAL_RCC_AHB_RELEASE_RESET();

    // Remap RAM into 0x0000 0000
    __HAL_SYSCFG_REMAPMEMORY_SRAM();
                               
}
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 04.04.2016, 16:00   #163
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,478
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

И все сделано как прописано там ? И скрипт линкера и остальное?
Цитата:
When developping a bootloader, we need to pay attention in few items, listed belos:

Create two separated memory regions in linker
Process an image, send to bootloader which must save somewhere. The use of CRC is a must to avoid corrupted image.
After reprogram flash, disable all interrupts, set stack pointer and jump to main application
In the main application, remap interrupt vector table as soon as possible
dosikus вне форума   Ответить с цитированием
Старый 04.04.2016, 16:25   #164
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 42
Сообщений: 376
Вес репутации: 243/21
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

нет, у него в статье в абзаце Linker приведен большой файл настройки линкера, я не знаю куда это поместить в кейл, но я сделал так: в проекте программы пользователя, в настройках линкера указал что программа начинается с адреса 0x08000C00 (сейчас бут занимает 3к).
ну и прыгаю в прогу как у него написано (правда где-то в другом месте срисовал, но суть та же...)
смысл в том что все работает (и бут и программа пользователя) если я не использую прерывания (я их и не использовал, но решил сделать как должно быть, поэтому и начал все эти шаманства включать в код...
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 12.05.2016, 21:48   #165
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 42
Сообщений: 376
Вес репутации: 243/21
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Добрый вечер,

с прерываниями так и не разобрался, но сейчас пришли железки, надо прошивать бутлоадер, поэтому хочу спросить - в бутлоадере не нужно никаких художеств с переносом векторов и всяких других шаманств? т.е. просто прыгаю в программу клиента, а она уже сама должна мудрить с прерываниями?
с клиентской то когда нить разберусь когда руки дойдут, но лишь бы бут не поменялся...
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 10.07.2016, 18:02   #166
Cavalryman
Senior Member
 
Регистрация: 09.01.2010
Адрес: Baltic states
Возраст: 30
Сообщений: 116
Вес репутации: 198/29
Cavalryman has a spectacular aura aboutCavalryman has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Цитата:
Сообщение от IceS Посмотреть сообщение
Полностью согласен. Для старта лучше не придумаешь, а если потом нужно будет такты выверять, то это как говорится "следующий уровень", тогда можно и руками переписать многие места.
Разрешите пару вопросов от далекого от этой темы человека:

1) Скажите пожалуйста, "руками переписать" - это на CMSIS ?

2) Если проект (на Кеил, например) и переферийная инициализяция генерируются из CubeMX, то можно ли оставить подключенной ХАЛ и дальше "руками переписать" определенные области ?
Тоесть, если ХАЛ, то только ХАЛ или люди комбинируют ?

3) CubeMX это единственный графический генератор инициализации для СТМ32 ? И если генерируешь инициализацию на CubeMX, то ХАЛ будет использоваться неизбежно ?
Cavalryman вне форума   Ответить с цитированием
Старый 10.07.2016, 18:59   #167
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,533
Вес репутации: 4855/151
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Цитата:
Сообщение от Cavalryman Посмотреть сообщение
Разрешите пару вопросов от далекого от этой темы человека:

1) Скажите пожалуйста, "руками переписать" - это на CMSIS ?

2) Если проект (на Кеил, например) и переферийная инициализяция генерируются из CubeMX, то можно ли оставить подключенной ХАЛ и дальше "руками переписать" определенные области ?
Тоесть, если ХАЛ, то только ХАЛ или люди комбинируют ?

3) CubeMX это единственный графический генератор инициализации для СТМ32 ? И если генерируешь инициализацию на CubeMX, то ХАЛ будет использоваться неизбежно ?
2. хал относится только к периферии. естественно все остальные "области" надо писать самому. естественно какую-то периферию можно (и нужно) писать только руками.

3. графического там очень мало чего (клоки).

мда. этот хал как ассемблер пика - удел начинающих и профессионалов.

там есть реально сложная периферия, типа передать данные по иис с помощью дма. халом делается в два клика. а какие-то привычные простые вещи типа просто принимать в прерываниях побайтно из уарт полностью вывернуты. можно принять в какой-то буфер только определенное количество байт. всякие совмещенные коллбэки и т.д.

т.е. если начинающий и планируете использовать куб, то скорее всего в этом меду так и залипните. но очень многие вещи просто пройдут мимо.
Greg вне форума   Ответить с цитированием
Старый 10.07.2016, 19:41   #168
Cavalryman
Senior Member
 
Регистрация: 09.01.2010
Адрес: Baltic states
Возраст: 30
Сообщений: 116
Вес репутации: 198/29
Cavalryman has a spectacular aura aboutCavalryman has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Greg, спасибо, стало понятнее.
"Залипнуть" - в смысле не смочь выбраться из комфортной среды ?
Cavalryman вне форума   Ответить с цитированием
Старый 10.07.2016, 22:44   #169
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,533
Вес репутации: 4855/151
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Цитата:
Сообщение от Cavalryman Посмотреть сообщение
Greg, спасибо, стало понятнее.
"Залипнуть" - в смысле не смочь выбраться из комфортной среды ?
ну да. начиная с какой-то мощности камня этот хал становится вообще не заметным.
Greg вне форума   Ответить с цитированием
Старый 23.07.2016, 19:36   #170
Cavalryman
Senior Member
 
Регистрация: 09.01.2010
Адрес: Baltic states
Возраст: 30
Сообщений: 116
Вес репутации: 198/29
Cavalryman has a spectacular aura aboutCavalryman has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Здравствуйте.

Условно измеряю скорость вращения диска с помощью датчика Холла. На практике, в качестве датчика Холла я использую кнопку и имитирую срабатывиние датчика.

- По нажатию кнопки (датчик Холла) срабатывает прерывание, где я смотрю сколько натикал таймер, считаю скорость в м/с, обнуляю таймер и жду следующего прерывания.

- Есть также прерывание от этого таймера по переполнению. Это, типа, диск не вращается или вращается слишком медленно. По этому прерыванию показание скорости сбрасывается в ноль.

- Есть другой таймер, заведенный на 0,5 секунд, по переполнению которого скорость вместе с буковками всякими отправляется на компьютер через УАРТ.

Проблема:
Достаточно часто (через каждые 6-10 показаний) мне приходит очень маленькое значение таймера и, как следствие, огромная скорость. Мне совершенно непонятно почему. Можете, пожалуйста посоветовать что-то ?

Процедура обработки прерывания по кнопке:
PHP код:
void Speed_capture()                                                                    //button (hall sensor) interrupt routine
{
            if(
__HAL_TIM_GetCounter(&htim3)>30)                            //Button jitter removal
                
{
                
speed_timer __HAL_TIM_GetCounter(&htim3);        //Read counter value
                
speed speed_constant/speed_timer;                        //Calculating disk speed based on counter "ticks"
                
__HAL_TIM_SET_COUNTER(&htim30);                            //Reset counter so that I can measure the speed again
                
}                                                                                                //on the next interrupt

Таймер:
PHP код:
htim3.Instance TIM3;
  
htim3.Init.Prescaler 40000//40MHz
  
htim3.Init.CounterMode TIM_COUNTERMODE_UP;
  
htim3.Init.Period 2500;
  
htim3.Init.ClockDivision TIM_CLOCKDIVISION_DIV1;
  if (
HAL_TIM_Base_Init(&htim3) != HAL_OK)
  {
    
Error_Handler();
  } 
Прерывание:
PHP код:
void EXTI0_IRQHandler(void)
{
  
/* USER CODE BEGIN EXTI0_IRQn 0 */

  /* USER CODE END EXTI0_IRQn 0 */
  
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
  
/* USER CODE BEGIN EXTI0_IRQn 1 */
    
Speed_capture();
  
/* USER CODE END EXTI0_IRQn 1 */

Отправка пакета:
PHP код:
void Transmit_package()
{
        
sprintf(buffer,"Speed_timer is: %d ticks   Speed is: %f \n\r"speed_timerspeed);
        
len=strlen(buffer);
        
HAL_UART_Transmit(&huart1,(uint8_t*) bufferlen100);
        
i++;

Cavalryman вне форума   Ответить с цитированием
Старый 23.07.2016, 20:17   #171
Cavalryman
Senior Member
 
Регистрация: 09.01.2010
Адрес: Baltic states
Возраст: 30
Сообщений: 116
Вес репутации: 198/29
Cavalryman has a spectacular aura aboutCavalryman has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Тут что-то с дребезгом, мне кажется.
Причем в момент отжатия кнопки. Как раз проходят 30 мс и опять срабатывает прерывание.
Cavalryman вне форума   Ответить с цитированием
Старый 23.07.2016, 20:28   #172
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,533
Вес репутации: 4855/151
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Цитата:
Сообщение от Cavalryman Посмотреть сообщение
Тут что-то с дребезгом, мне кажется.
Причем в момент отжатия кнопки. Как раз проходят 30 мс и опять срабатывает прерывание.
да, это известный феномен.
надо (на)учиться давить дребезг.
или использовать что-нибудь без дребезга - подносить магнит к тому же датчику.
Greg вне форума   Ответить с цитированием
Старый 23.07.2016, 23:29   #173
Cavalryman
Senior Member
 
Регистрация: 09.01.2010
Адрес: Baltic states
Возраст: 30
Сообщений: 116
Вес репутации: 198/29
Cavalryman has a spectacular aura aboutCavalryman has a spectacular aura about
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Да, это был дребезг на отжатии кнопки, скорее всего.
Вот такая процедура вне прерывания помогла почти полностью исключить неправильные показания. Почти...
Процедура ждет, когда кнопка отожмется и после отжатия еще считает 100 раз, а затем устанавливает флаг завершения "отжатия" кнопки. Если происходит дребезг, то счетчик сбрасывается в ноль и надо набрать 100 циклов опять. Надеюсь, с реальным Холл сенсором такой фигни не будет.

В прерывании, соответственно, проверяется состояние флага.

Процедура:
PHP код:
if ((HAL_GPIO_ReadPin (GPIOAGPIO_PIN_0) == 1) && (speed_flag==1))
    {
        
j++;
    }
    
if ((
HAL_GPIO_ReadPin (GPIOAGPIO_PIN_0) == 0) && (speed_flag==1))
    {
        
j=0;
    }
            
if (
j>100)
    {
        
speed_flag=0;
        
j=0;
    } 
Обработчик прерывания:
Код:
void Speed_capture()
{
            if((__HAL_TIM_GetCounter(&htim3)>30) && (speed_flag==0))
                {
                speed_timer = __HAL_TIM_GetCounter(&htim3);
                speed = speed_constant/speed_timer;
                speed_flag = 1;
                __HAL_TIM_SET_COUNTER(&htim3, 0);
                }
}
Cavalryman вне форума   Ответить с цитированием
Старый 29.07.2016, 11:12   #174
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,478
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

http://www.mikrocontroller.net/artic...th_HALL_Sensor
dosikus вне форума   Ответить с цитированием
Старый 29.07.2016, 12:36   #175
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,533
Вес репутации: 4855/151
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: STM32F0, помигать светодиодами, Keil не компилит

Цитата:
Сообщение от dosikus Посмотреть сообщение
думаешь, на мотор замахнулся? с трудом...
Greg вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что за зверь - Скатерограмма Edua Общетехнические вопросы 17 01.03.2013 23:33
Алгоритм Герцеля. Mario Продукция MICROCHIP 45 08.12.2009 15:53
Нужна ли МК ОС? syv Инструментарий 179 22.01.2009 10:59
Макимальная частота прерываний от TMR0 ANH Продукция MICROCHIP 114 05.04.2008 00:50
Нужна прошивка на PIC16F877 для бегущей строки!!! VanoMC Продукция MICROCHIP 12 13.04.2007 11:06


Часовой пояс GMT +3, время: 00:27.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot