20.09.2011, 11:32
|
|
Временная регистрация
Регистрация: 09.02.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
GPIO можно инициализировать сколько влезет, хоть по одному пину по-отдельности, вот например рабочий код:
Код:
|
/*************************
TouchScreen & SD-Card
**************************/
// Configure SPI pins: SCK and MOSI with default alternate function (not remapped) push-pull
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_SD_SCK | GPIO_Pin_SD_MOSI;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIO_SD, &GPIO_InitStructure);
// Configure MISO as Input with internal pull-up
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_SD_MISO;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIO_SD, &GPIO_InitStructure);
// Configure SD_CS pin
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_SD_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_SD, &GPIO_InitStructure);
//Configure ADS7843 pins: CS
GPIO_InitStructure.GPIO_Pin = ADS7843_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
GPIO_Init(ADS7843_PORT_CS,&GPIO_InitStructure); |
А вот
Код:
|
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN, ENABLE); |
второй раз наверное не стоит делать
|
|
|
|
20.09.2011, 11:46
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Короче, опыт показал, что в регистры CRL и CRH можно писать что душе угодно. Пока к ним не подключен clock, это ничего не даст. Команда RCC_AHBPeriphClockCmd всегда должна идти первой. Мелкие, но все же грабли.
pve70, вы потом асм не смотрели, сколько там кода получается? А то чует мой хвост, что совершенно примитивные операции даже при максимальной компиляции раздуваются весьма прилично. У меня тут простенький проект, объединяющий дисплей и радиочип уже весит более 4к. На восьмибитном пике при таком объеме кода он бы уже умел еду готовить и на орбиту выходить.
|
|
|
|
20.09.2011, 11:48
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Если данные из дма передаются в цап однократно не в circle режим, то как мне можно передавать данные например нажатием кнопки, какой флаг надо сбрасывать в регистрах дма? Собственно код:
void InitDMA2_3(void)
{
/* DMA1 clock enable */
RCC-›AHBENR |= RCC_AHBENR_DMA2EN;
/*Peripheral Adress*/
DMA2_Channel3-›CPAR = (uint32_t) & DAC-›DHR8R1;
/*Memory Adress*/
DMA2_Channel3-›CMAR = (u32) &dataSOUND528;
/*Data transfer direction - To Peripheral*/
DMA2_Channel3-›CCR |= DMA_CCR3_DIR;
/*Number of data to be transferred*/
DMA2_Channel3-›CNDTR = LEN_SIN; // Lenght of sin table (Buffer size)
/*Peripheral increment mode Disable*/
DMA2_Channel3-›CCR &= ~DMA_CCR3_PINC;
/*Memory increment mode */
DMA2_Channel3-›CCR |= DMA_CCR3_MINC;
/*Memory size - 16bit*/
DMA2_Channel3-›CCR |= DMA_CCR3_MSIZE_0;
/*Peripheral size - 16bit*/
DMA2_Channel3-›CCR |= DMA_CCR3_PSIZE_0;
/*Circular mode - Enable*/
//DMA2_Channel3-›CCR |= DMA_CCR3_CIRC;
/*Channel Priority level - High) */
DMA2_Channel3-›CCR |= DMA_CCR3_PL_1;
/*Memory to memory mode - Disable */
DMA2_Channel3-›CCR &= ~DMA_CCR3_MEM2MEM;
/*DMA1 Channel3 enable */
DMA2_Channel3-›CCR |= DMA_CCR3_EN;
}
Заранее благодарен откликнувшимся
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
20.09.2011, 11:53
|
|
Временная регистрация
Регистрация: 09.02.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Цитата:
|
вы потом асм не смотрели, сколько там кода получается?
|
Да нет, я пока до оптимизации не добрался - сначала надо принцип общения с STM32 понять, а потом уж код вылизывать.
|
|
|
|
20.09.2011, 14:01
|
|
Частый гость
Регистрация: 07.03.2011
Сообщений: 38
Сказал спасибо: 1
Сказали Спасибо 19 раз(а) в 16 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pve70
|
Есть у кого нормальный код работы с SD-картами по SPI?
А то у китаез в примерах карты через раз определяются, Kingston и Apacer - нормально, остальные плохо. К тому же повесил на этот же SPI сенсорный контроллер ADS7843 - не хочет он одновременно работать с SD картой - при чтени хрень всякую выдает, видимо в процессе работы с SD-картой у SPI на ходу режимы меняются. Но на 128-й меге у меня же все работало и дружили на одном SPI и карты и сенсор !
|
примеры keil через C:\Keil\ARM\RL\FlashFS\Drivers\SPI_STM32F103.c
устойчиво работают с разными картами...
В процессе инициализации обмена с картой вызывается mmc_init (перепроверка что ее не выдернули и тд) -- там меняются режимы SPI в зависимости от ответа карты -- типа карты -- иначе и быть не может -- при переходе на обмен с жк -- их надо восстанавливать...
ЗЫ исходники идут только к 4,13!!!
|
|
|
Сказали "Спасибо" Gaaaaaad
|
|
|
21.09.2011, 11:50
|
|
Прописка
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pve70
|
Да нет, я пока до оптимизации не добрался - сначала надо принцип общения с STM32 понять, а потом уж код вылизывать.
|
Кстати, по поводу размера кода. Случайно нашел вот такую инфу по методам доступа к отдельным битам портов ввода-вывода:
Сообщение от http://www.gaw.ru
|
Теперь мы можем создать указатель на этот адрес с помощью следующей Си-строки:
Код:
|
#define PortBbit8 (*((volatile unsigned long *) 0x422181A0 )) |
После этого, этот указатель можно использовать для установки и сброса бит ПВВ:
Код:
|
PB8 = 1; //включаем светодиод |
После компиляции будут сгенерированы следующие ассемблерные инструкции:
Код:
|
MOVS r0,#0x01
LDR r1,[pc,#104]
STR r0,[r1,#0x00] |
Для отключения светодиода используем строку:
Код:
|
PB8 = 0; // отключаем светодиод |
Ей соответствуют следующие ассемблерные инструкции:
Код:
|
MOVS r0,#0x00
LDR r1,[pc,#88]
STR r0,[r1,#0x00] |
Таким образом, для установки или сброса бита необходимо выполнить три 16-битных инструкции.
Микроконтроллер STM32, работающий на частоте 72 МГц, выполнит их за 80 нс. Альтернативно установку или сброс
бита можно выполнить, если применить логическую операцию "ИЛИ" или "И" ко всему слову из области хранения бит
УВВ или статического ОЗУ:
Код:
|
GPIOB-›ODR |= 0x00000100; //Включение светодиода |
Код:
|
LDR r0,[pc,#68]
ADDS r0,r0,#0x08
LDR r0,[r0,#0x00]
ORR r0,r0,#0x100
LDR r1,[pc,#64]
STR r0,[r1,#0xC0C] |
Код:
|
GPIOB-›ODR &=!0x00000100; //Отключение светодиода |
Код:
|
LDR r0,[pc,#40]
ADDS r0,r0,#0x08
LDR r0,[r0,#0x00]
MOVS r0,#0x00
LDR r1,[pc,#40]
STR r0,[r1,#0xC0C] |
Но в таком случае, одна операция установки/сброса потребует выполнения смеси 16- и 32-битных инструкций,
которые займут минимум 14 байт и на той же тактовой частоте будут выполняться как минимум 180 нс. Таким
образом, в программе, где используется установка/сброс множества бит в регистрах УВВ, а также применяются
семафоры и флаги в статическом ОЗУ, использование метода bit banding позволит существенно сэкономить, как
размер кода программы, так и время его выполнения.
|
Последний раз редактировалось a-fisher; 21.09.2011 в 11:53.
|
|
|
Эти 4 пользователя(ей) сказали Спасибо a-fisher за это сообщение:
|
|
|
21.09.2011, 12:50
|
|
Временная регистрация
Регистрация: 09.02.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ух, люблю въедливых людей!! Не дает покоя китайско-индусская реализация. Камрад, мы с тобой !!!
|
|
|
|
21.09.2011, 13:26
|
|
Прописка
Регистрация: 09.11.2010
Сообщений: 102
Сказал спасибо: 4
Сказали Спасибо 28 раз(а) в 22 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pve70
|
Есть у кого нормальный код работы с SD-картами по SPI?
|
http://gandalf.arubi.uni-kl.de/avr_p...#chanfat_stm32
Не нашел пока карточки, которая не работает с такой инициализацией.
SanDisk, Transcend, Kingston, Noname (несколько разных) ; НС и обычные; объемом 1, 2, 4, 8, 16 ГБ - работают нормально.
|
|
|
Сказали "Спасибо" Serega_B
|
|
|
21.09.2011, 17:39
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от a-fisher
|
Случайно нашел вот такую инфу по методам доступа к отдельным битам портов ввода-вывода
|
"Всё уже украдено до нас!"...
Февраль 2008-го...
http://www.hitex.com/fileadmin/pdf/i...2-v18d-scr.pdf
|
|
|
|
21.09.2011, 18:41
|
|
Прописка
Регистрация: 10.08.2010
Сообщений: 113
Сказал спасибо: 30
Сказали Спасибо 43 раз(а) в 26 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от st_1
|
"Всё уже украдено до нас!"
|
и даже переведено на русский
http://www.gaw.ru/html.cgi/txt/doc/m..._arh/index.htm
|
|
|
Сказали "Спасибо" avs2009
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:13.
|
|