07.07.2021, 13:54
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 434
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ты же, как программист, должен понимать, что нуль тоже данные.
|
|
|
|
07.07.2021, 15:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,651
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Однако, одно дело, когда ты всегда детерминированные значения получаешь в случае отсутствия данных, и совсем другое — когда случайные. Ведь SPI в режиме слейва, если данных для отправки нет, отбрасывает "дно" FIFO, а это — четвертый с конца элемент. Ладно бы хоть последний…
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
24.07.2021, 11:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,651
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Какая-то адова чертовщина у меня с попытками ввести программно STM32F042 в DFU. Вот код:
Код:
|
#define SYSMEM03x 0x1FFFEC00
#define SYSMEM04x 0x1FFFC400
#define SYSMEM05x 0x1FFFEC00
#define SYSMEM07x 0x1FFFC800
#define SYSMEM09x 0x1FFFD800
// define SystemMem to other in MAKEFILE
#ifndef SystemMem
#define SystemMem SYSMEM04x
#endif
void Jump2Boot(){
__disable_irq();
void (*SysMemBootJump)(void);
volatile uint32_t addr = SystemMem;
// reset systick
SysTick-›CTRL = 0;
// reset clocks
RCC-›APB1RSTR = RCC_APB1RSTR_CECRST | RCC_APB1RSTR_DACRST | RCC_APB1RSTR_PWRRST | RCC_APB1RSTR_CRSRST |
RCC_APB1RSTR_CANRST | RCC_APB1RSTR_USBRST | RCC_APB1RSTR_I2C2RST | RCC_APB1RSTR_I2C1RST |
RCC_APB1RSTR_USART4RST | RCC_APB1RSTR_USART3RST | RCC_APB1RSTR_USART2RST | RCC_APB1RSTR_SPI2RST |
RCC_APB1RSTR_WWDGRST | RCC_APB1RSTR_TIM14RST |
#ifdef STM32F072xB
RCC_APB1RSTR_TIM7RST | RCC_APB1RSTR_TIM6RST |
#endif
RCC_APB1RSTR_TIM3RST | RCC_APB1RSTR_TIM2RST;
RCC-›APB2RSTR = RCC_APB2RSTR_DBGMCURST | RCC_APB2RSTR_TIM17RST | RCC_APB2RSTR_TIM16RST |
#ifdef STM32F072xB
RCC_APB2RSTR_TIM15RST |
#endif
RCC_APB2RSTR_USART1RST | RCC_APB2RSTR_SPI1RST | RCC_APB2RSTR_TIM1RST | RCC_APB2RSTR_ADCRST | RCC_APB2RSTR_SYSCFGRST;
RCC-›AHBRSTR = 0;
RCC-›APB1RSTR = 0;
RCC-›APB2RSTR = 0;
__DSB();
// remap system flash memory to 0 (only for STM32F0)
SYSCFG-›CFGR1 = 0x01; __DSB(); __ISB();
SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
// set main stack pointer
__set_MSP(*((uint32_t *)addr));
// jump to bootloader
SysMemBootJump();
} |
На F072 (с соответствующим дефайном) он работает. А здесь - фигвам! Думал уж, что из-за вотчдога, но нет: без "собаки" тоже не работает.
Вместо того, чтобы выйти в режим DFU, оно заново перезапускается:
Код:
|
[ 401.785411] usb 7-1: USB disconnect, device number 2
[ 401.787383] pl2303 ttyUSB0: error sending break = -19
[ 401.787517] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[ 401.787526] pl2303 7-1:1.0: device disconnected
[ 402.090390] usb 7-1: new full-speed USB device number 3 using uhci_hcd
[ 402.215465] usb 7-1: device descriptor read/64, error -71
[ 402.925481] usb 7-1: device descriptor read/64, error -71
[ 403.147435] usb 7-1: new full-speed USB device number 4 using uhci_hcd
[ 403.300347] usb 7-1: New USB device found, idVendor=067b, idProduct=2303, bcdDevice= 3.00
[ 403.300352] usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 403.300355] usb 7-1: Product: USB-Serial Controller
[ 403.300358] usb 7-1: Manufacturer: Prolific Technology Inc.
[ 403.303448] pl2303 7-1:1.0: pl2303 converter detected
[ 403.316493] usb 7-1: pl2303 converter now attached to ttyUSB0 |
(у меня CDC эмулирует PL2303).
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
24.07.2021, 13:46
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 753
Сказал спасибо: 365
Сказали Спасибо 829 раз(а) в 389 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
eddy, механизм 'Empty Check' - не оно?
AN2606 - шикарная аппнота по разным bootloader-ам.
|
|
|
|
24.07.2021, 14:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,651
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
j-Roger, спасибо, понял!
Жаль, что это так. Придется программный переход в DFU убрать из конечного варианта прошивки, чтобы юзер случайно не стер флеш МК...
UPD: факир был пьян. Если стереть страничку по адресу 0x08000000, наступает тупая перезагрузка, SysMemBootJump() не выполняется ☹
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 24.07.2021 в 14:56.
|
|
|
|
15.11.2021, 00:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,651
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ах, жесть! Наткнулся на косяк с инициализацией таймера в STM32F072. Больше вероятности, конечно, что я накосячил, но все-таки интересно: как только врубаю таймер и включаю прерывания по CC, МК зависает. При включенном-то watchdog'е! А обновление вотчдога только в суперлупе, там же выводятся раз в 2 секунды сообщения... И вот, сообщений нет, МК висит… Ладно, "метод Монте-Карло" не должен подвести.
UPD: виноваты были мои руки из жопы.
В общем, альфа-версия контроля трех моторов заработала, теперь нужно в железе испытывать. Если на рывках будет пропускать шаги, придется вместо красивого трапецеидального рампа скорости делать трапецеидальный рамп ускорения.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 17.11.2021 в 13:12.
|
|
|
|
11.02.2022, 21:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,651
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Мужики, ну подскажите, пожалуйста: не могу у STM32F303 запустить флоаты. Софтовые работают, а вот хард - фигвам!
Опции линкера:
Код:
|
-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -mlittle-endian -DARM_MATH_CM4 -D __ARM_ARCH_7M__ -specs=nano.specs -lc -L../inc/ld -Tstm32f303xB.ld -Wl,-Map=mk/usart1.map,--cref -Wl,--gc-sections -Wl,--print-memory-usage |
Если указать -mfloat-abi=soft - работает, а так - нет.
В начале инициализации операции с плавающей точкой разрешаются:
Код:
|
SCB-›CPACR |= ((3UL ‹‹ 10*2)|(3UL ‹‹ 11*2)); |
softfp, кстати, тоже не работает.
Ура! Нашел решение: в стартапе я в reset_handler готовлю данные, а потом сразу вызываю main(). А уже оттуда вызываю все настройки. И тут-то нежданчик: оказывается, gcc выталкивал на стек флоаты в main() еще до инициализации FPU. Перенес инициализацию в reset_handler - заработало.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 11.02.2022 в 23:04.
|
|
|
|
04.04.2022, 14:58
|
|
Прописка
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Подскажите, почему не работает atof(). atoi() - Работает.:
Код:
|
float a;
char strDec[16];
void func(){
a=atof(strDec);
} |
Работает:
Код:
|
int a;
char strDec[16];
void func(){
a=atoi(strDec);
} |
|
|
|
|
04.04.2022, 20:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от sanstan
|
Подскажите, почему не работает atof(). atoi() - Работает.:
|
По подробней, что да как.
|
|
|
|
05.05.2022, 22:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,651
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Мужики, а для MLX90632 кто-нибудь приличные сниппеты встречал? А то мне все попадается какое-то непотребное абдуринство. Чем такое УГ причесывать, быстрей будет самому написать.
Может таки есть уже готовое нормальное? Или никому эти ИК-датчики и даром не впарились? (а мне вот очень надо, т.к. полноценную ИК all-sky камеру мы из-за гейских натовцев еще долго не сможем купить)
UPD: начал помаленьку... Как же эти товарищи все усложнили! Ну неужели нельзя было хотя бы little endian использовать?
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 09.05.2022 в 18:08.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:44.
|
|