STM32 новичку в ARM что к чему
-
Alex_Golubev
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Re: STM32 новичку в ARM что к чему
Скажите что за параметр функции Timeout в HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout); ? Не понял для чего нужен.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: STM32 новичку в ARM что к чему
I2C slave может поломаться или повесить шину. Видимо чтобы отследить такой аварийный случай.
Нужно потому что
Нужно потому что
Function Description
Transmits in master mode an amount of data in blocking mode.
Re: STM32 новичку в ARM что к чему
Есть задача где с помощью АЦП надо контролировать поведение схемы.
Напрашивается сюда прерывания по АЦП и старт-стоп АЦП в режиме continues.
Однако подобного не видел. В инете промелькнуло что прерывания с АЦП не правильный подход.
Как правильней?
Напрашивается сюда прерывания по АЦП и старт-стоп АЦП в режиме continues.
Однако подобного не видел. В инете промелькнуло что прерывания с АЦП не правильный подход.
Как правильней?
Re: STM32 новичку в ARM что к чему
Есть вопросы по прерываниям. При прерывании по внешнему сигналу используется NVIC+EXTI.
Не на все вывода и не на все режимы (фронт, спад, оба) они работаю. Где можно узнать почему так и какие правильно?
Не на все вывода и не на все режимы (фронт, спад, оба) они работаю. Где можно узнать почему так и какие правильно?
Re: STM32 новичку в ARM что к чему
Подскажите, если ли режим DMA(Периферия-Периферия) у каких нибудь STM.
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: STM32 новичку в ARM что к чему
Ну к примеру STM32L, по крайней мере здесь это описано, правда есть сомнения http://chipspace.ru/stm32l-dma/pokk писал(а):режим DMA(Периферия-Периферия)
Периферия – Память
Память – Периферия
Периферия – Периферия
Память – Память
В даташите.es131245 писал(а):Где можно узнать почему так и какие правильно?
Re: STM32 новичку в ARM что к чему
es131245, можно через DMA, который будет выдавать прерывание после завершения преобразования на всех каналах. Запускать АЦП можно по внешнему триггеру, например по таймеру.
- Вложения
-
- ADC_Ext_Trig_Test.rar
- (849.13 КБ) 149 скачиваний
Иван Сусанин - первый полупроводник 
- Alexey_N
- Сверлит текстолит когтями
- Сообщения: 1273
- Зарегистрирован: Вт фев 01, 2011 17:56:40
- Откуда: г. Жуковка, Брянская обл.
Re: STM32 новичку в ARM что к чему
На 142 странице я писал о корректировке функций для работы с FP-числами, так вот, функция сложения все же имела еще одну неприятную особенность - при сложении двух противоположных чисел получалось не 0, а +0.5. Вот исправленный вариант:
Также была проблема со сложением двух околонулевых (денормализованных) чисел. Для своих задач в функции я считаю за 0 результат, если оба числа имеют порядок 0:
PS. Все это для МК STM32F103.
Спойлер
Код: Выделить всё
;************************************************
;* desc: Складывает два вещественных числа *
;* in: r0 - слагаемое 1 (float32) *
;* r1 - слагаемое 2 (float32) *
;* out: r0 - сумма (float32) *
;* used: r0-r6 *
;* mod: r0 *
;************************************************
_fadd:
push {r1-r6, lr}
mov r4, r0
eors r4, r1
movs r5, 1
lsls r5, 31
ands r4, r5 ; r4 - маска знака
lsls r2, r0, 1
lsrs r2, 24 ; r2 = AEXP
lsls r3, r1, 1
lsrs r3, 24 ; r3 = BEXP
adds r6, r2, r3
beq .complete
cmp r2, r3
bge .f_noswap
push {r0} ; если AEXP < BEXP, то:
mov r0, r1 ; меняем местами мантиссы
pop {r1}
push {r2} ; меняем местами порядки
mov r2, r3
pop {r3}
.f_noswap:
mov r6, r2 ; сохраним AEXP в r6
subs r2, r3 ; r2 = AEXP - BEXP
mov r3, r5
ands r3, r0
lsls r0, 8 ; установим в 1 старший бит
lsls r1, 8
orrs r0, r5
orrs r1, r5
lsrs r0, 8 ; r0 = мантисса A
lsrs r1, 8 ; r1 = мантисса B
lsrs r1, r2 ; BEXP = r6
tst r4, r4 ; r4 = XOR маска знака
beq .addition
subs r0, r1 ; r0 = A - B
bpl .normaliz
rsbs r0, 0 ; вычитаем из 0, A = -A
eors r3, r5 ; инвертируем знак результата
b .normaliz
.addition:
adds r0, r1 ; складываем мантиссы A+B
mov r2, r6 ; r2 = AEXP
lsls r1, r0, 8 ; проверим на перенос (бит 25)
bcc .normaliz
lsrs r0, 1
adds r2, 1 ; EXP = EXP + 1
b .make_num
.normaliz:
mov r2, r6
lsls r0, 8
.nrm_loop:
lsls r0, 1 ; сдвигаем влево на 1 бит
bcs .nrm_done ; флаг C установлен?
subs r2, 1 ; уменьшаем порядок на 1
bpl .nrm_loop
adds r2, 1
.nrm_done: ; r2 = порядок, r0 = мантисса
lsrs r0, 9
.make_num:
lsls r0, 9 ; очистим бит 23
lsrs r0, 9
lsls r2, 23 ; сдвигаем порядок в позицию [30:23]
orrs r0, r2 ; порядок OR мантисса
orrs r0, r3 ; r2 = порядок OR мантисса OR знак
.complete:
pop {r1-r6, pc}
Также была проблема со сложением двух околонулевых (денормализованных) чисел. Для своих задач в функции я считаю за 0 результат, если оба числа имеют порядок 0:
Код: Выделить всё
adds r6, r2, r3
beq .complete
PS. Все это для МК STM32F103.
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: STM32 новичку в ARM что к чему
Будьте так любезны, подскажите куда делся ST-LINK utility. Не могу скачать со страницы ST.
Re: STM32 новичку в ARM что к чему
amv2000, сайт поди обновляют. Было подобное...
Re: STM32 новичку в ARM что к чему
РадиоЛоматель писал(а):Satyr писал(а):Вы че народ ?
самый кошерный J-link клон из китая с ДОСТАВКОЙ стоит до 20$
Заказал я себе этот клон. J-Link v8, такой, как тут: http://de1fer.ru/?p=146
Сайт переехал, теперь статья доступна по [url="https://delfer.ru/2011/12/03/%D0%BA%D0%B8%D1%82%D0%B0%D0%B9%D1%81%D0%BA%D0%B8%D0%B9-j-link-v8/"]новому адресу[/url].
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: STM32 новичку в ARM что к чему
Alexey_N писал(а):PS. Все это для МК STM32F103.
Код функции на первый взгляд получился пригодным и для М0.
Вот две маленьких приблуды для удобства работы с числами с плавающей и фиксированной точкой:
- Вложения
-
- converters.zip
- (32.99 КБ) 146 скачиваний
-
Alex_Golubev
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Re: STM32 новичку в ARM что к чему
Скажите как можно проверять какой таймер вызвал прерывания void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) ?
-
Alex_Golubev
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Re: STM32 новичку в ARM что к чему
Нашел ответ
Спойлер
Код: Выделить всё
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance==TIM3) //check if the interrupt comes from TIM3
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
}
- RusikOk
- Нашел транзистор. Понюхал.
- Сообщения: 197
- Зарегистрирован: Пн янв 24, 2011 01:51:48
- Откуда: Украина, Киев
- Контактная информация:
Re: STM32 новичку в ARM что к чему
подскажите как через куб настроить внешние прерывания для 103го
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Всем привет. Столкнулся со странностями поведения STM32F100x4.
Спаял устройство на макетке. Решил протестить. В общем, на PB3 и PB4 не могу выставить уровни. Такое чувство что они весят в воздухе. Вольтметр (если отпаять выводы от платы) показывает "мусор".
PB6 - PB15 работают нормально. Ноги МК припаяны нормально. Флюс (активный, гидрокс) смыт. Смотрел по шагам через отладчик на SWD
Есть ли какая-нибудь особенность использования порта?
Думал что контроллер убил. Заменил его. Ничего не изменилось. Или и второй сдох, или я тугадум.
Монтаж проверил. Все по схеме.
Код проверки

Спаял устройство на макетке. Решил протестить. В общем, на PB3 и PB4 не могу выставить уровни. Такое чувство что они весят в воздухе. Вольтметр (если отпаять выводы от платы) показывает "мусор".
PB6 - PB15 работают нормально. Ноги МК припаяны нормально. Флюс (активный, гидрокс) смыт. Смотрел по шагам через отладчик на SWD
Есть ли какая-нибудь особенность использования порта?
Думал что контроллер убил. Заменил его. Ничего не изменилось. Или и второй сдох, или я тугадум.
Монтаж проверил. Все по схеме.
Код проверки
Код: Выделить всё
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
void GPIO_Config (void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_DeInit(GPIOB);
GPIO_InitTypeDef gpio_port;
gpio_port.GPIO_Pin = GPIO_Pin_All;
gpio_port.GPIO_Mode = GPIO_Mode_Out_PP;
gpio_port.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &gpio_port);
}
void main(void)
{
GPIO_Config();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_14|GPIO_Pin_15);
}
}
Последний раз редактировалось Chip115 Вс июл 03, 2016 11:08:45, всего редактировалось 1 раз.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: STM32 новичку в ARM что к чему
Там альтернативные функции висят BOOT1 и JTDO.
Re: STM32 новичку в ARM что к чему
На PB3 JTDO/SWO,ремап нужен.
PB2 в коде не вижу...
И сей ногодрыг жесть.
PB2 в коде не вижу...
И сей ногодрыг жесть.
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Опечатка. PB3 и PB4. Спасибо. Сча попробую ремапнуть
-----
Проблема решена. Спасибо!
Добавил строки в инициализацию
-----
Проблема решена. Спасибо!
Добавил строки в инициализацию
Код: Выделить всё
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Еще проблемка.
Я юзаю кварц на 4 МГц.
Библиотека stm32f10x заточена на 8 Мгц.
Что надо сделать, что бы запустить HSE?
HSE_VALUE в файле stm32f10x.h менять с 8000000 на 4000000 и производить настройку?
Если вот так сделаю, то будет работать? Хочу запустить генератор на частоте 16 МГц HSE
Частота HSI 8 Мгц. Если не производить настройку генератора, то при запуске с таким кодом (тупо мигалка)
задержка не 1 с, а около 10-12 сек.Почему так?
Я юзаю кварц на 4 МГц.
Библиотека stm32f10x заточена на 8 Мгц.
Что надо сделать, что бы запустить HSE?
HSE_VALUE в файле stm32f10x.h менять с 8000000 на 4000000 и производить настройку?
Если вот так сделаю, то будет работать? Хочу запустить генератор на частоте 16 МГц HSE
Код: Выделить всё
volatile uint8_t Clock=0;
volatile uint32_t SystemCoreClock = 0;
RCC_ClocksTypeDef RCC_Clock;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
while (ERROR == RCC_WaitForHSEStartUp())
{
}
RCC_GetClocksFreq(&RCC_Clock);
RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE, RCC_PREDIV1_Div1);
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_2);
RCC_PLLCmd(ENABLE);
RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);
RCC_GetClocksFreq(&RCC_Clock);
Clock = RCC_GetSYSCLKSource ();
SystemCoreClock = RCC_Clock.HCLK_Frequency;Частота HSI 8 Мгц. Если не производить настройку генератора, то при запуске с таким кодом (тупо мигалка)
задержка не 1 с, а около 10-12 сек.Почему так?
Код: Выделить всё
void vDelay()
{
unsigned int time = 0;
for (time=0; time < 8000000; time++)
{
}
GPIOA->ODR ^= 0x8000;
}Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
