05.01.2013, 01:20
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Кстати, в папке \mikroC PRO for ARM\Uses\ST M3 нашел замечательный файлик __Lib_Delays.c, в котором есть коды для задержек:
Код:
|
void Delay_Cyc(unsigned long cycles_div_by_10){ // Cycles_div_by_10 parameter range: min = 1, max = 4294967295
asm{
nop.w
subs R0,R0,#1
label1:
subs R0,R0,#1
nop
nop
nop
nop
nop
nop
nop
bne label1
}
}
void VDelay_ms(unsigned long Time_ms){ // Time_ms parameter range: min = 1, max = 4294967295
unsigned long NumberOfCyc;
NumberOfCyc = Clock_kHz(); // cycles per milisecond
NumberOfCyc *= Time_ms; // total number of cycles
Delay_Cyc(NumberOfCyc / 10 - 3);
asm{
nop
nop
nop
nop
nop
nop
}
}
void VDelay_Advanced_ms(unsigned long Time_ms, unsigned long Current_Fosc_kHz){ // Time_ms parameter range: min = 1, max = 4294967295
unsigned long NumberOfCyc;
NumberOfCyc = Current_Fosc_kHz; // cycles per milisecond
NumberOfCyc *= Time_ms; // total number of cycles
Delay_Cyc(NumberOfCyc / 10 - 3);
asm{
nop
nop
nop
nop
nop
nop
}
} |
Их можно легко перетащить в Keil или IAR и там пользовать. Задержки у этих компиляторов работают отменно.
|
|
|
|
05.01.2013, 13:15
|
|
Прописка
Регистрация: 20.02.2006
Сообщений: 284
Сказал спасибо: 9
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Кто-нибудь пробовал подсоединить динамик к STM32VLDISCOVERY?
Только через усилитель или может есть более простые варианты?
Тут например на прямую к ЦАП, 32Омный подключен. Сигнал на выходе в основном 0,2-0,3В с очень редкими пиками ~2,5В. Но все равно выглядит как-то не надежно, как бы не спалить МК.
http://we.easyelectronics.ru/STM32/v...chi-speex.html
|
|
|
|
05.01.2013, 13:18
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
LM386 в помощь!
|
|
|
|
05.01.2013, 13:42
|
|
Гражданин KAZUS.RU
Регистрация: 27.11.2012
Адрес: 30км от Софии
Сообщений: 732
Сказал спасибо: 89
Сказали Спасибо 310 раз(а) в 180 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от EXIS
|
подсоединить динамик
|
Еще не остыл, потому встреваю.
TDA2040, не менее. Выход к динамику через резистор 10 Ом. Дорого, но спокойно.
Питание 5 - 40В, термическая защита есть. В описании от ST R4 указан 4.7 Ом. Надо 1. Возбуждается.
LM386 тоже можно, но осторожно. Для N1 питание макс 15В. Не есть гуд
ПС. Если для рации другое дело. TDA жрет солидно. LM386 класика.
Последний раз редактировалось 3d cube; 05.01.2013 в 13:47.
|
|
|
Сказали "Спасибо" 3d cube
|
|
|
05.01.2013, 14:04
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Цитата:
|
Тут например на прямую к ЦАП, 32Омный подключен.
|
даташит читать пробовали ? там все есть, в том числе и вых.характеристики ЦАПа. Короткий ответ - нет, нельзя
|
|
|
|
05.01.2013, 14:52
|
|
Прописка
Регистрация: 20.02.2006
Сообщений: 284
Сказал спасибо: 9
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Спасибо. Буду использовать LM386.
|
|
|
|
08.01.2013, 09:07
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Какие настройки ЦАПа нужны для синхронизации с прерыванием таймера ?
Запись в регистр работает только при DAC_Trigger = DAC_Trigger_None , при установке в DAC_Trigger_T4_TRGO - тишина:
Код:
|
void setup_dac() {
GPIO_InitTypeDef gpio_dac;
GPIO_StructInit(&gpio_dac);
gpio_dac.GPIO_Pin = GPIO_Pin_4;
gpio_dac.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &gpio_dac);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
DAC_InitTypeDef dac;
DAC_StructInit(&dac);
dac.DAC_Trigger = DAC_Trigger_None;
dac.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
dac.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_Init(DAC_Channel_1, &dac);
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
DAC_Cmd(DAC_Channel_1, ENABLE);
} |
P.S. нашел интересную книгу: http://www.cs.indiana.edu/~geobrown/book.pdf
|
|
|
|
08.01.2013, 11:23
|
|
Временная регистрация
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от st_1
|
Сравните даташиты... вам сразу всё станет ясно...
Две ноги придётся отогнуть и повесить через конденсаторы... всё остальное совпадает...
Вот STM32F205 в STM32VL-Discovery... вместо STM32F100
Вложение 27355
|
А для чего нужны конденсаторы на VCAP ? Так и не понял. И обязательно ли их ставить?
|
|
|
|
08.01.2013, 11:36
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
mr_smit, это питание ядра. Нужны! В разумных пределах. Причем ставить надо как можно ближе к ногам.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
08.01.2013, 20:07
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Не запускается DMA для SPI, подскажите что я тут криво делаю?
проверял с прерываниями - все работает, а DMA - не отзывается.
Код:
|
void dta_init_spi()
{
SPI_InitTypeDef spi_init;
// configure SPI1
RCC_APB2PeriphClockCmd(SPI1, ENABLE);
spi_init.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi_init.SPI_Mode = SPI_Mode_Slave;
spi_init.SPI_DataSize = SPI_DataSize_8b;
spi_init.SPI_CPOL = SPI_CPOL_High;
spi_init.SPI_CPHA = SPI_CPHA_1Edge;
spi_init.SPI_NSS = SPI_NSS_Soft;
spi_init.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
spi_init.SPI_FirstBit = SPI_FirstBit_MSB;
spi_init.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &spi_init);
#ifdef DTA_USE_SPI_IRQ
SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_TXE,ENABLE);
NVIC_InitTypeDef nvic_init;
nvic_init.NVIC_IRQChannel = SPI1_IRQn;
nvic_init.NVIC_IRQChannelPreemptionPriority = 0;
nvic_init.NVIC_IRQChannelSubPriority = 0;
nvic_init.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic_init);
#endif
}
void dta_init_dma()
{
DMA_InitTypeDef dma_init;
NVIC_InitTypeDef nvic_init;
DMA_DeInit(DMA1_Channel4);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // Enable DMA Clock
dma_init.DMA_PeripheralBaseAddr = (uint32_t) &SPI1-›DR;
dma_init.DMA_MemoryBaseAddr = (uint32_t) _dta_spi_buff;
dma_init.DMA_DIR = DMA_DIR_PeripheralDST; // SPI-› output
dma_init.DMA_BufferSize = DTA_BUFF_SIZE;
dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable;
dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
dma_init.DMA_Mode = DMA_Mode_Circular;
dma_init.DMA_Priority = DMA_Priority_VeryHigh;
dma_init.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel4, &dma_init);
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE); // Enable Transmit complete Interrupt
SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Tx, ENABLE);
DMA_Cmd(DMA1_Channel4,ENABLE);
nvic_init.NVIC_IRQChannel = DMA1_Channel4_IRQn;
nvic_init.NVIC_IRQChannelPreemptionPriority = 1;
nvic_init.NVIC_IRQChannelSubPriority = 1;
nvic_init.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic_init);
}
void dta_init()
{
dta_init_spi();
dta_init_dma();
SPI_Cmd(DTA_SPI, ENABLE);
DTA_SPI-›CR1 &=~0x0100; // Clear SSI - Software Chip select
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:38.
|
|