08.08.2012, 14:15
|
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Сообщение от dosikus
|
Смотрите справку по CMSIS - запустите index.html .
А так же core_cmx.h там есть все для настройки ядра ...
И лучше пользоваться готовыми функциями CMSIS чем городить свое , это все таки не SPL ...
Пример оттуда :
Код:
|
static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
if(IRQn ‹ 0) {
SCB-›SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority ‹‹ (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */
else {
NVIC-›IP[(uint32_t)(IRQn)] = ((priority ‹‹ (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
} |
|
Спасибо большое, полезные функции )))
Код:
|
NVIC_EnableIRQ(EXTI0_IRQn);
NVIC_SetPriority(EXTI0_IRQn,1); |
Код:
|
NVIC-›ISER[0]|=(1‹‹6);//6 settable EXTI0 Line0 interrupt
NVIC-›IP[1]=0xF000; //установка приоритета 15 для 6-й Position |
как оказалось это две идентичные надстройки, только во втором случае пришлось немного рассчитать!
Кстати и на железе все работает)
Последний раз редактировалось sosedi; 08.08.2012 в 14:24.
|
|
|
|
09.08.2012, 15:13
|
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
И снова непонятки(Вот решил научиться работать с ЦАП-ом, вродеб все как в даташите:
сначала включаю тактирование,
потом выбираю событие для отправки данных,
включаю сам ЦАП,
загружаю в регистр данные для отправки,
ну и произвожу событие для отправки, но ниего не работает(((
Цитата:
|
//***********DAC****************
RCC-›APB1ENR |= RCC_APB1ENR_DACEN; // вкл такт ЦАП
DAC-›CR |= DAC_CR_TSEL1; // выбор события для отправки данных
// (программное событие SWTRIGR)
DAC-›CR |= DAC_CR_EN1; // вкл. ЦАП 1
DAC-›DHR12R1 = 0xFFF; // загрузка данных в ЦАП1
DAC-›SWTRIGR |= DAC_SWTRIGR_SWTRIG1; // программное события запуска
|
что не так люди подскажите?
|
|
|
|
09.08.2012, 16:34
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Софтовый пинок не пробовал и STM32F4 нет .
Вот мой бред(но работающий ) выдранный из SPL с использованием только CMSIS .
STM32VL Discovery .
Код:
|
#include "stm32f10x.h"
#define DAC_Trigger_T2_TRGO ((uint32_t)0x00000024)
#define DAC_WaveGeneration_Noise ((uint32_t)0x00000040)
#define DAC_WaveGeneration_Triangle ((uint32_t)0x00000080)
#define DAC_TriangleAmplitude_1023 ((uint32_t)0x00000900)
#define DAC_TriangleAmplitude_2047 ((uint32_t)0x00000A00)
#define DAC_OutputBuffer_Disable ((uint32_t)0x00000002)
#define DAC_Channel_1 ((uint32_t)0x00000000)
#define DAC_Channel_2 ((uint32_t)0x00000010)
#define DAC_Align_12b_R ((uint32_t)0x00000000)
#define DAC_Align_12b_L ((uint32_t)0x00000004)
#define DAC_Align_8b_R ((uint32_t)0x00000008)
/* DHR registers offsets */
#define DHR12R1_Offset ((uint32_t)0x00000008)
#define DHR12R2_Offset ((uint32_t)0x00000014)
#define DHR12RD_Offset ((uint32_t)0x00000020)
/* DOR register offset */
#define DOR_Offset ((uint32_t)0x0000002C)
#define TIM_TRGOSource_Update ((uint16_t)0x0020)
u8 DataCAP;
void Delay(__IO uint32_t nCount);
void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data);
void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1);
int main(void)
{
SystemInit ();
RCC-›APB1ENR |= RCC_APB1ENR_DACEN;
RCC-›APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2-›ARR = 0x0F;
TIM2-›PSC = 0x01;
TIM2-›CR1 = 0;
/* Reset the MMS Bits */
TIM2-›CR2 &= (uint16_t)~((uint16_t)TIM_CR2_MMS);
/* Select the TRGO source */
TIM2-›CR2 |= TIM_TRGOSource_Update;
DAC-›CR |=(DAC_Trigger_T2_TRGO |DAC_WaveGeneration_Triangle|DAC_TriangleAmplitude _1023|DAC_OutputBuffer_Disable );
DAC-›CR |=((DAC_Trigger_T2_TRGO |DAC_WaveGeneration_Triangle|DAC_TriangleAmplitude _2047 |DAC_OutputBuffer_Disable )‹‹DAC_Channel_2);
DAC-›CR |= DAC_CR_EN1;
DAC-›CR |= DAC_CR_EN2;
TIM2-›CR1 |= TIM_CR1_CEN;
//DAC_SetChannel1Data(DAC_Align_12b_R, 0x100);
DAC_SetDualChannelData(DAC_Align_12b_R, 0x100, 0x100);
while (1)
{
}
}
// --------------------------------------------------
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
//---------------------------------
void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)
{
__IO uint32_t tmp = 0;
/* Check the parameters */
tmp = (uint32_t)DAC_BASE;
tmp += DHR12R1_Offset + DAC_Align;
/* Set the DAC channel1 selected data holding register */
*(__IO uint32_t *) tmp = Data;
}
void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)
{
uint32_t data = 0, tmp = 0;
/* Calculate and set dual DAC data holding register value */
if (DAC_Align == DAC_Align_8b_R)
{
data = ((uint32_t)Data2 ‹‹ 8) | Data1;
}
else
{
data = ((uint32_t)Data2 ‹‹ 16) | Data1;
}
tmp = (uint32_t)DAC_BASE;
tmp += DHR12RD_Offset + DAC_Align;
/* Set the dual DAC selected data holding register */
*(__IO uint32_t *)tmp = data;
} |
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
13.08.2012, 10:51
|
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Подскажите, а как настроить частоту работы МК?
По идее, по умолчанию должна быть выбрана макс частота, но если завести таймер на 168mHz, то прерывания происходят явно не каждую секунду(
Не пойму, либо я таймер не так настроил либо не та частота стоит!
как выставить опред частоту?
Код:
|
//***********TIM7***************
RCC-›APB1ENR |= RCC_APB1ENR_TIM7EN;// тактирование таймера
TIM7-›PSC = 168000-1;// предделитель
TIM7-›ARR = 1000;// переполнение
TIM7-›DIER |= TIM_DIER_UIE; // прерывание по переполнению
TIM7-›CR1 |= TIM_CR1_CEN;// запуск счета
NVIC_EnableIRQ(TIM7_IRQn); |
|
|
|
|
14.11.2012, 16:52
|
|
Частый гость
Регистрация: 19.05.2012
Сообщений: 25
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: stm32f4, asm с чего начать?
Сообщение от sosedi
|
Всем привет! Люди добрые подскажите с чего начать?
Раньше программировал pic16 и 18 на asm.Теперь стоит задача изучить arm-кие МК, и вот который день долблюсь, не могу понять, даже, как зажечь светодиод.
Имеется отладочная плата STM32F4DISCOVERY.Для начала, хочу зажечь светодиод хотябы на С. Согласно datasheet stm32f4, первым делом я подключаю библиотеки и включаю тактирование порта, в моем случае GPIOC:
Код:
|
RCC-›AHB1ENR |= RCC_AHB1Periph_GPIOC; |
потом устанавливаю порт на выход:
Код:
|
/* These bits are written by software to configure the I/O direction mode.
00: Input (reset state)
01: General purpose output mode
10: Alternate function mode
11: Analog mode*/
GPIOC-›MODER |=0x55555555; |
далее задаю частоту, к примеру 50MHz :
Код:
|
/* These bits are written by software to configure the I/O output speed.
00: 2 MHz Low speed
01: 25 MHz Medium speed
10: 50 MHz Fast speed
11: 100 MHz High speed on 30 pF (80 MHz Output max speed on 15 pF)*/
GPIOC-›OSPEEDR |=0xFFFF;
GPIOC-›OSPEEDR |=0xFFFF; |
ну и высокий уровень:
GPIOC-›ODR |=0xFFFFFFFF;
не могу понять что я не так делаю???
Посоветуйте какое ПО(бесплатное) выбрать, на данный момент я остановился на CooCox!
Облазил весь нэт, ни одной программы на asm-e под STM ни нашел(( как хоть на нем писать. Может есть у когониб примеры на assemblere? буду очень благодарен)
|
Если задачей еще интересуетесь в плане asm то попробую помочь чем смогу.
Последний раз редактировалось HELLEVIL; 14.11.2012 в 16:57.
|
|
|
Сказали "Спасибо" HELLEVIL
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
С чего начать?
|
ourlive |
Электроника - это просто |
179 |
17.04.2012 23:02 |
С чего начать?
|
nickdkn |
Электроника - это просто |
9 |
12.07.2011 20:13 |
С чего начать?
|
Митрофаныч |
Микроконтроллеры, АЦП, память и т.д |
17 |
03.10.2010 21:18 |
PICи - с чего начать?
|
Alexxx2005 |
Микроконтроллеры, АЦП, память и т.д |
11 |
27.05.2007 01:37 |
C чего начать?
|
melkij |
Микроконтроллеры, АЦП, память и т.д |
11 |
21.08.2006 13:39 |
Часовой пояс GMT +4, время: 12:34.
|
|