Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Ответ
Опции темы
Непрочитано 31.05.2012, 00:27   #1531
dccharacter
Временная регистрация
 
Регистрация: 28.03.2010
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
dccharacter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А у меня какая-то жесть прям происходит.
Придется приводить весь код, чтобы поверили.

main():
PHP код:
int main(void)
{
    
RCC_Configuration();
    
//SysTick_Config(SystemCoreClock / 1);
    
GPIO_Configuration();
    
TIM_Configuration ();
    
HallInterface_Configuration ();

    while(
1)
    {

    }

RCC_Configuration():
PHP код:
void RCC_Configuration(void)
{
    
RCC_DeInit ();                    /* RCC system reset(for debug purpose)*/
    
RCC_HSEConfig (RCC_HSE_ON);       /* Enable HSE                         */

    /* Wait till HSE is ready                                               */
    
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);

    
RCC_HCLKConfig   (RCC_SYSCLK_Div1);   /* HCLK   = SYSCLK                */
    
RCC_PCLK2Config  (RCC_HCLK_Div1);     /* PCLK2  = HCLK                  */
    
RCC_PCLK1Config  (RCC_HCLK_Div2);     /* PCLK1  = HCLK/2                */
    
RCC_ADCCLKConfig (RCC_PCLK2_Div4);    /* ADCCLK = PCLK2/4               */

    /* PLLCLK = 8MHz * 3 = 72 MHz                                           */
    
RCC_PLLConfig (0x00010000RCC_PLLMul_3);

    
RCC_PLLCmd (ENABLE);                  /* Enable PLL                     */

    /* Wait till PLL is ready                                               */
    
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

    
/* Select PLL as system clock source                                    */
    
RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);

    
/* Wait till PLL is used as system clock source                         */
    
while (RCC_GetSYSCLKSource() != 0x08);
    
RCC_SYSCLKConfigRCC_SYSCLKSource_PLLCLK);

PHP код:
void GPIO_Configuration(void)
{
    
/* Initialize Leds mounted on STM32 board */
    
GPIO_InitTypeDef  GPIO_InitStructure;
    
/* Initialize LED which connected to PC6,9, Enable the Clock*/
    
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOCENABLE);

    
GPIO_DeInit(GPIOC);
    
/* Configure the GPIO_LED pin */
    
GPIO_InitStructure.GPIO_Pin GPIO_Pin_9;
    
GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;
    
GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;
    
GPIO_Init(GPIOC, &GPIO_InitStructure);

    
GPIO_ResetBits(GPIOC,GPIO_Pin_9);

TIM_Configuration ():
PHP код:
void TIM_Configuration (void)
{
    
/**
     * TIM2 mocks Hall sensors output by consequently generating DMA request
     * to fetch from memory next state of three output pins
     * HallU - PC10
     * HallV - PC11
     * HallW - PC12
     */
    
GPIO_InitTypeDef GPIO_InitStructure;
    
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    
DMA_InitTypeDef DMA_InitStructure;

    const 
uint32_t GPIO_PinsState[6] = {
            
134222848402654208268438528,
            
33554636867115008201330688    };

    
uint16_t FullCycleFreq 1240//Hz, 6 steps, full electrical rotation
    
uint16_t TimerFreq FullCycleFreq 6;
    
uint16_t TimerPeriod = (uint16_t)(SystemCoreClock/(TimerFreq 1));

    
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOCENABLE);

    
GPIO_InitStructure.GPIO_Pin GPIO_Pin_10 GPIO_Pin_11 GPIO_Pin_12;
    
GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;
    
GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;
    
GPIO_Init(GPIOC, &GPIO_InitStructure);

    
GPIOC-›BSRR = (1‹‹25)+(1‹‹24)+(1‹‹11);

    
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1ENABLE);

    
DMA_DeInit(DMA1_Channel2);
    
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32GPIOC_BSRR_Address;
    
DMA_InitStructure.DMA_MemoryBaseAddr = (u32GPIO_PinsState;
    
DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralDST;

    
DMA_InitStructure.DMA_BufferSize 6;
    
DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable;
    
DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable;
    
DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Word;
    
DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_Word;
    
DMA_InitStructure.DMA_Mode DMA_Mode_Circular;
    
DMA_InitStructure.DMA_Priority DMA_Priority_High;
    
DMA_InitStructure.DMA_M2M DMA_M2M_Disable;

    
DMA_Init(DMA1_Channel2, &DMA_InitStructure); //TIM2_UP = Channel2

    
DMA_Cmd(DMA1_Channel2ENABLE);

    
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2ENABLE);

    
TIM_TimeBaseStructure.TIM_Period TimerPeriod;
    
TIM_TimeBaseStructure.TIM_Prescaler 0;
    
TIM_TimeBaseStructure.TIM_ClockDivision 0;
    
TIM_TimeBaseStructure.TIM_RepetitionCounter 0;
    
TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up;
    
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


    
TIM_DMACmd(TIM2TIM_DMA_UpdateENABLE);

    
TIM_Cmd(TIM2ENABLE);

После этого юзерские светодиоды не горят (с чего бы?) и на осцилле картинка IMAG008.jpg (как мне и надо, пока все ОК).

Дальше, InterfaceTimerSetup ():
PHP код:
void InterfaceTimerSetup (void)
{
    
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure1;
    
TIM_ICInitTypeDef TIM_ICInitStructure;
    
TIM_OCInitTypeDef TIM_OCInitStructure;
    
NVIC_InitTypeDef NVIC_InitStructure;

    
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4ENABLE);

    
TIM_TimeBaseStructure1.TIM_Prescaler 12;//126;
    
TIM_TimeBaseStructure1.TIM_CounterMode TIM_CounterMode_Down;//TIM_CounterMode_Up;
    
TIM_TimeBaseStructure1.TIM_Period 1;//65535;
    
TIM_TimeBaseStructure1.TIM_ClockDivision 1;//0;
    
TIM_TimeBaseStructure1.TIM_RepetitionCounter 1;//0;
    
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure1);


После заполнения структуры зажигается светодиод на PC9 (уровень постоянно высокий) и картинка на осцилле меняется на IMAG007.jpg. Я даже не запустил таймер!
Менял таймер на TIM3, то же самое. Что за фигня происходит?
P.S. Желтый сигнал с PC11
P.S.S. Происходит это прям при входе в функцию. Только что заметил, что с настройками "без оптимизации" и "optimize size" проблема есть, при включении оптимизации 1-3 проблема исчезает. Реально какая-то жуткая невиданная хрень. Мы все умрем ИМХО.
P.S.S.S. Проблема исчезает временно, при дальнейшей инициализации Capture/Compare каналов сигнал опять разъезжается, каждый раз одинаково для одного и того же уровня оптимизации, но по-разному для разных.
Миниатюры:
Нажмите на изображение для увеличения
Название: IMAG008.jpg
Просмотров: 103
Размер:	53.5 Кб
ID:	35401   Нажмите на изображение для увеличения
Название: IMAG007.jpg
Просмотров: 77
Размер:	54.4 Кб
ID:	35402  
Реклама:

Последний раз редактировалось dccharacter; 31.05.2012 в 00:40.
dccharacter вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 10:47   #1532
avs2009
Прописка
 
Аватар для avs2009
 
Регистрация: 10.08.2010
Сообщений: 113
Сказал спасибо: 30
Сказали Спасибо 43 раз(а) в 26 сообщении(ях)
avs2009 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

st__1, а в чем собственно разница:
у меня
Код:
while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_TXE));       
 SPI1-›DR = data & 0xFF;               
 while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_RXNE));      
 recive=(recive‹‹8) | SPI1-›DR;
предлагаете вы
Код:
while (!(SPIx-›SR & 2));
 SPIx-›DR=byte;
 while (!(SPIx-›SR & 1));
Код:
#define  SPI_SR_RXNE                         ((uint8_t)0x01)               /*!‹ Receive buffer Not Empty */
#define  SPI_SR_TXE                          ((uint8_t)0x02)
пробовал с проверкой BSY и без - одинаково.

У меня же оно все работает в режиме отладки!!!
avs2009 вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 11:14   #1533
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от avs2009 Посмотреть сообщение
предлагаете вы
ХДЕ???
Предложил Easyrider83... меня лишь улыбнула форма его записи...
Сообщение от avs2009 Посмотреть сообщение
У меня же оно все работает в режиме отладки!!!
Подозреваю, что у вас где-то не выдерживаются тайминги... При отладке ИАР, ИМХО, лихо подтормаживает и у вас поэтому всё работает...
st__1 вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 11:22   #1534
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от dccharacter Посмотреть сообщение
Только что заметил, что с настройками "без оптимизации" и "optimize size" проблема есть, при включении оптимизации 1-3 проблема исчезает. Реально какая-то жуткая невиданная хрень.
"Этот вой у них песней зовётся" (С)
Не хочу вас пугать... но алгоритм проги, ИМХО, придётся пересматривать...
st__1 вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 11:39   #1535
avs2009
Прописка
 
Аватар для avs2009
 
Регистрация: 10.08.2010
Сообщений: 113
Сказал спасибо: 30
Сказали Спасибо 43 раз(а) в 26 сообщении(ях)
avs2009 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

st__1, тайминги? Я же проверяю состояние битов перед записью и чтением.
Попробую тормоз приделать после проверки.... но что -то сомневаюсь в результате.
Может что-то еще с JTAG надо сделать?
Я отключаю так:
Код:
AFIO-›MAPR|=AFIO_MAPR_SWJ_CFG_1;
Пока писал откуда-то пришла мысль может надо
альтернативные функции тактировать до конфигурации AFIO?

P.S. Мысль была верная. Код заработал в любых режимах.

Последний раз редактировалось avs2009; 31.05.2012 в 18:08. Причина: решено.
avs2009 вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 12:23   #1536
dccharacter
Временная регистрация
 
Регистрация: 28.03.2010
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
dccharacter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от st__1 Посмотреть сообщение
"Этот вой у них песней зовётся" (С)
Не хочу вас пугать... но алгоритм проги, ИМХО, придётся пересматривать...
Да я не из пугливых. Только там алгоритма нет. Главный цикл - пустой.
dccharacter вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 12:52   #1537
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А причём здесь главный цикл???
Я вам пытаюсь объяснить, что то, с чем вы столкнулись, вполне нормально...
Компилятор "играет так, как может", конвейер АРМа - "играет, как умеет"...
Если вам нужны жёсткие тайминги, то "нужно постараться"...
st__1 вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 12:56   #1538
dccharacter
Временная регистрация
 
Регистрация: 28.03.2010
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
dccharacter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от st__1 Посмотреть сообщение
А причём здесь главный цикл???
Я вам пытаюсь объяснить, что то, с чем вы столкнулись, вполне нормально...
Компилятор "играет так, как может", конвейер АРМа - "играет, как умеет"...
Если вам нужны жёсткие тайминги, то "нужно постараться"...
Ну он как-то странно умеет. Там частота всего около 8 кГц. Приоритет ДМА вроде максимальный. Ну хрен с ним с ДМА - отчего зажигается светодиод? Такое чувство что кот-то залезает не в свою память, т.е. наверняка где-то моя стандартная ошибка - вместо указателя передать указатель на указатель. Но все глаза просмотрел - ничего найти не могу.
dccharacter вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 13:11   #1539
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от dccharacter Посмотреть сообщение
отчего зажигается светодиод?
Смотрите АСМ-листинг...
Либо "поворот не туда", либо компилятор что-то выбросил...
st__1 вне форума   Ответить с цитированием
Непрочитано 31.05.2012, 22:28   #1540
dccharacter
Временная регистрация
 
Регистрация: 28.03.2010
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
dccharacter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от st__1 Посмотреть сообщение
Смотрите АСМ-листинг...
Либо "поворот не туда", либо компилятор что-то выбросил...
TIM_TimeBaseInit:
0x08000180: push {r7}
0x08000182: sub sp, #20
0x08000184: add r7, sp, #0
0x08000186: str r0, [r7, #4]
0x08000188: str r1, [r7, #0]
228 uint16_t tmpcr1 = 0;
0x0800018a: mov.w r3, #0

Мда. Это я на данной ступени эволюции не потяну...
dccharacter вне форума   Ответить с цитированием
Ответ

Закладки


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


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


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