10.07.2012, 16:11
|
|
Частый гость
Регистрация: 15.01.2009
Сообщений: 17
Сказал спасибо: 7
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от st__1
|
Только в Target Options/ C/C++ вставил STM32F10X_MD_VL...
|
и проекты закомпилились. спасибо.
|
|
|
|
10.07.2012, 16:17
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от sergeewd
|
и проекты закомпилились.
|
Ну и ?
Discovery есть ? Прошивай и на RA4 осциллом любуйся...
Треугольник на два канала
Код:
|
#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)
{
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; 10.07.2012 в 16:40.
|
|
|
|
11.07.2012, 10:03
|
|
Прохожий
Регистрация: 28.01.2011
Сообщений: 8
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
void base_speak_timer_func(void)
{
static uint8_t i=31;
i++;
.......
}
Компилирую в последнем yagarto, отлаживую gdb из atollic, все из eclipse.
Запуская в прерывании по обновлению таймера.
При первом запуске переменная инициализируется 255тью вместо 31ого. Причем если инициализировать нулем, то все ок работает...
Кроме этого дальше все ведет себя нормально. Чего такая глупость происходит?
Пасибо
|
|
|
|
11.07.2012, 11:18
|
|
Гость
|
Re: Изучаем STM32 Cortex M3
А если так?
Код:
|
void base_speak_timer_func(void)
{
uint8_t i=31;
i++;
.......
} |
|
|
|
|
11.07.2012, 12:25
|
|
Прохожий
Регистрация: 28.01.2011
Сообщений: 8
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Я в пятницу вернусь домой и попробую, но обычные переменные вроде нормально инициализировались.
А есть мысли, с чем это связано?
|
|
|
|
11.07.2012, 18:57
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
124bit ассемблер для этого куска есть? что там?
|
|
|
|
13.07.2012, 14:52
|
|
Прохожий
Регистрация: 28.01.2011
Сообщений: 8
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
вот ассемблер:
base_speak_timer_func:
0800044c: push\t{r7}
0800044e: add\tr7, sp, #0
130 i++;
08000450: movw\tr3, #0
08000454: movt\tr3, #8192\t; 0x2000
08000458: ldrb\tr3, [r3, #0]
0800045a: add.w\tr3, r3, #1
0800045e: uxtb\tr2, r3
08000460: movw\tr3, #0
08000464: movt\tr3, #8192\t; 0x2000
08000468: strb\tr2, [r3, #0]
161 }
0800046a: mov\tsp, r7
0800046c: pop\t{r7}
0800046e: bx\tlr
вот C:
void base_speak_timer_func(void)
{
static uint8_t i=15;
i++;
}
если без static - то инициализируется все норм.
Если static инициализировать 0, то тоже все норм.
Если static инициализировать не 0, то в любом случае после инициализации i=255
что за фигня, понять вообще не могу =(?
Платка - stm32DiscoveryVL.
Последний yagarto
|
|
|
|
13.07.2012, 21:00
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
вариант раз - долго копать где настраиваются статики при запуске и искать почему не настроились. читать доки. плакать по форумам
вариант два - смени компилер на пробу. вот что выдал иар, чисто как пример, все прозрачно:
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 283 void base_speak_timer_func (void)
// 284 {
// 285 static uint8_t i=15;
// 286 i++;
base_speak_timer_func:
LDR.N R0,??DataTable18_20
LDRB R1,[R0, #+0]
ADDS R1,R1,#+1
STRB R1,[R0, #+0]
// 287 }
BX LR ;; return
SECTION `.data`: DATA:NOROOT(0)
??i:
DATA
DC8 15
|
|
|
|
13.07.2012, 22:34
|
|
Прохожий
Регистрация: 28.01.2011
Сообщений: 8
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
понятно, пасиба.
Выбрал вариант 3 - провел рефакторинг и избавился от этой статической переменной xD
|
|
|
|
13.07.2012, 22:35
|
|
Частый гость
Регистрация: 15.01.2009
Сообщений: 17
Сказал спасибо: 7
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dosikus
|
Ну и ?
Discovery есть ? Прошивай и на RA4 осциллом любуйся...
Треугольник на два канала
Код:
|
#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)
{
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;
} |
|
на днях STM32VLDiscovery придет, вот и попробуем.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:22.
|
|