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

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

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

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

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

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


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

Сообщение от qwerky Посмотреть сообщение
››и опора для АЦП

и что ? у большинства стабилизаторов точность 1%, и дрейф на уровне TL431. Есть и с лучшими параметрами, в кр.случае есть опоры в виде проходного стабилизатора. Или вы хотите как в АВР - точность плюс минус лапоть, и дрейф заметен даже при небольшом нагреве ? Я - нет, такая "опора" мне не нужна
Что сказать-то хотел? Что питать надо от прецизионного стабилизатора?
Сообщение от qwerky Посмотреть сообщение
››Вот такая засада

да, особенно там где ее нет
Просто вместо 3В батарейки надо взять 5В батарейку и стабилизатор воткнуть - никаких засад!
Реклама:

Последний раз редактировалось dccharacter; 29.05.2012 в 13:32.
dccharacter вне форума  
Непрочитано 30.05.2012, 04:20  
dccharacter
Временная регистрация
 
Регистрация: 28.03.2010
Сообщений: 56
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
dccharacter на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Народ, подскажите - DMA шарашит с максимальной скоростью, в районе 5-ти мегагерц. Мне нужно чтобы по переполнению таймера было отослано одно слово. По следующему - еще одно. Так все шесть слов, потом по новой. Прерывания делал для отладки, вообще они мне (надеюсь) не нужны. Код:
PHP код:
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_dma.h"
#include "misc.h"

#define GPIOC_BSRR_Address GPIOC_BASE+0x10

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;

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

    
uint16_t TimerPeriod = (SystemCoreClock 18000 ) - 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);

    
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1ENABLE);

    
DMA_DeInit(DMA1_Channel5);
    
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_Enable;

    
DMA_Init(DMA1_Channel5, &DMA_InitStructure); //TIM2_CH1 = Channel5

    
DMA_Cmd(DMA1_Channel5ENABLE);

    
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2ENABLE);

    
/*NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori  ty = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);*/

    /*NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori  ty = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);*/

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

    
//TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    //DMA_ITConfig(DMA1_Channel5, DMA1_Channel5_IRQn, ENABLE);

    
TIM_Cmd(TIM2ENABLE);

    
TIM_DMACmd(TIM2TIM_DMA_UpdateENABLE);



    
//GPIO_SetBits(GPIOC, GPIO_Pin_10 | GPIO_Pin_12);
}

void TIM2_IRQHandler (void)
{
    
TIM_ClearITPendingBit(TIM2TIM_IT_Update);
    
GPIOC-›ODR ^= GPIO_Pin_9;
}

void DMA1_Channel5_IRQHandler(void)
{
    
DMA_ClearITPendingBit(DMA1_IT_GL5);
    
//GPIOC-›ODR ^= GPIO_Pin_8;
    
GPIO_SetBits(GPIOCGPIO_Pin_8);

P.S. Такой красивый кросс-толк на осцилле!
P.P.S. Уже нашел две ошибки - 1) M2M работает без триггера и 2)М2М нельзя использовать одновременно с циркулар мод.
М2М отключил, ДМА вообще не работает.
P.P.P.S Все, отловил. TIM2_UP мне был нужен, а это второй канал а не пятый.
Спасибо, что были с нами сегодня. Спать.

Последний раз редактировалось dccharacter; 30.05.2012 в 04:44.
dccharacter вне форума  
Непрочитано 30.05.2012, 20:19  
avs2009
Прописка
 
Аватар для avs2009
 
Регистрация: 10.08.2010
Сообщений: 113
Сказал спасибо: 30
Сказали Спасибо 43 раз(а) в 26 сообщении(ях)
avs2009 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Подскажите кто может.
Пытаюсь запустить SPI.
пользуюсь STM32-Discovery + IAR

Для теста SPI ставлю перемычку MISO-MOSI.
Пока работаю в отладчике все работает как надо. Что посылаю то и принимаю.
Но как только делаю RESET или запускаю программу автономно все меняется.
Что бы я не отсылал в ответ приходит 0xFEFEFEFE. Что это за фокусы?

Перед инициализацией SPI я отключаю JTAG
Тактирование альтернативных функций включено
Пины портов настроены на альтернативные функции

Код:
void SPI_INIT()
{
    // REMAP  SPI
  AFIO-›MAPR|=AFIO_MAPR_SPI1_REMAP;
   // тактирование SPI
  RCC-›APB2ENR |= RCC_APB2ENR_SPI1EN;
   //настройка 
  SPI1-›CR1=0;
  SPI1-›CR1 |=SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_CPHA | SPI_CR1_BR_1;
  // включение SPI 
  SPI1-›CR1    |= SPI_CR1_SPE;
для теста написал функцию
Немного длинно, но это заготовка для работы с конвертором TDC-GP2

Код:
uint32_t TEST_SPI(uint32_t data)
{
 uint32_t recive;
  
 PIN_OFF(TDCGP2_PORT,TDCGP2_SSN);
 
 while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_TXE));  
 SPI1-›DR = (data››24);                
 while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_RXNE));   
 recive=SPI1-›DR;                                                         
 
 while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_TXE));      
 SPI1-›DR = (data››16) & 0xFF;           
 while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_RXNE));      
 recive=(recive‹‹8) | SPI1-›DR;            
 
 while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_TXE));       
 SPI1-›DR = (data››8) & 0xFF;           
 while (SPI1-›SR & SPI_SR_BSY);
 while (!(SPI1-›SR & SPI_SR_RXNE));      
 recive=(recive‹‹8) | SPI1-›DR;          
 
 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;         
 
 PIN_ON(TDCGP2_PORT,TDCGP2_SSN);
 
 return  recive;  
}
avs2009 вне форума  
Непрочитано 30.05.2012, 20:28  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

avs2009, ловите рабочий код
Код:
void init_SPI	(SPI_TypeDef* SPIx)
{
	SPI_InitTypeDef SPI_InitStruct;
	SPI_InitStruct.SPI_Direction=SPI_Direction_2Lines_  FullDuplex;
	SPI_InitStruct.SPI_Mode=SPI_Mode_Master;
	SPI_InitStruct.SPI_DataSize=SPI_DataSize_8b;
	SPI_InitStruct.SPI_CPOL=SPI_CPOL_Low;
	SPI_InitStruct.SPI_CPHA=SPI_CPHA_1Edge;
	SPI_InitStruct.SPI_NSS=SPI_NSS_Soft;
	SPI_InitStruct.SPI_BaudRatePrescaler=SPI_BaudRateP  rescaler_2;
	SPI_InitStruct.SPI_FirstBit=SPI_FirstBit_MSB;
	SPI_InitStruct.SPI_CRCPolynomial=7;
	SPI_Init(SPIx, &SPI_InitStruct);

	SPI_Cmd(SPIx, ENABLE);
}

void SPI_SendByte(SPI_TypeDef* SPIx,u16 byte)
{
	u16 tmp=SPI_ReadByte(SPIx,byte);	
}

u16 SPI_ReadByte(SPI_TypeDef* SPIx,u16 byte)
{
	while (!(SPIx-›SR & 2));
	SPIx-›DR=byte;
	while (!(SPIx-›SR & 1));
	return SPIx-›DR;
}
Можете ковырнуть библиотеки и вытащить оттуда флаги и регистры.
Easyrider83 вне форума  
Непрочитано 30.05.2012, 21:51  
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

SPI!!! Работать!!! Раз, два!!!
Сообщение от Easyrider83 Посмотреть сообщение
Код:
 while (!(SPIx-›SR & 2));
 SPIx-›DR=byte;
 while (!(SPIx-›SR & 1));
st__1 вне форума  
Непрочитано 30.05.2012, 21:59  
avs2009
Прописка
 
Аватар для avs2009
 
Регистрация: 10.08.2010
Сообщений: 113
Сказал спасибо: 30
Сказали Спасибо 43 раз(а) в 26 сообщении(ях)
avs2009 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Easyrider83, Спасибо. Попробую поковырять и приделать к своей программе.
Но почему мой-то код только в отладчике работает?

st__1, а над этим подумаю завтра

Последний раз редактировалось avs2009; 30.05.2012 в 22:03.
avs2009 вне форума  
Непрочитано 30.05.2012, 22:17  
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А чё там думать???

Код:


#define  SPI_SR_RXNE                         ((uint8_t)0x01)               /*!‹ Receive buffer Not Empty */
#define  SPI_SR_TXE                          ((uint8_t)0x02)               /*!‹ Transmit buffer Empty */
st__1 вне форума  
Непрочитано 30.05.2012, 22:41  
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Easyrider83 Посмотреть сообщение
ловите рабочий код
Уверены???
st__1 вне форума  
Непрочитано 30.05.2012, 23:19  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от st__1 Посмотреть сообщение
Уверены???
Видео:

Но можно и так:
Код:
u16 SPI_ReadByte(SPI_TypeDef* SPIx,u16 byte)
{
    /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);


  /* Send byte through the SPI1 peripheral */
 SPI_I2S_SendData(SPIx, byte);

  /* Wait to receive a byte */
 while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);

  /* Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPIx);
}
Easyrider83 вне форума  
Непрочитано 30.05.2012, 23:59  
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А это зачем???
Код:

    /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
.
.
.
.
st__1 вне форума  
 

Закладки
Опции темы

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

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:23.


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