18.02.2020, 23:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dgrishin
|
в конструкции while (~GPIOC-›IDR & (GPIO_IDR_IDR6|GPIO_IDR_IDR7)) {}
компилятор ведь не знает что GPIOC-›IDR это read-only регистр и попытка изменить его содержимое (~GPIOC-›IDR) приводит к полному фиаско
|
Вот только (~GPIOC-›IDR) - это НЕ попытка изменить содержимое GPIOC-›IDR
|
|
|
|
18.02.2020, 23:56
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от AJScorp
|
А можно посмотреть листинг на мой код?
|
Кажется должен был сохранить на работе.
Кстати в последнем листинге оптимизация была выключена.
А проблема у меня похоже с быстродействием связана или RTOS мешает.
Сообщение от AR_Favorit
|
Вот только (~GPIOC-›IDR) - это НЕ попытка изменить содержимое GPIOC-›IDR
|
Кажись на правду похоже, вроде всегда этот обработчик начинается вот так
Код:
|
LDR.N RХ, [PC, #0xХХ]
LDR RХ, [RХ] |
То есть копирует в регистр содержимое IDR, а потом с регистром развлекается.
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
|
11.03.2020, 13:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Мужики, помогите! Как правильно программно переключиться в бутлоадер на STM32F072?
Делаю вот так:
Код:
|
void Jump2Boot(){
void (*SysMemBootJump)(void);
volatile uint32_t addr = 0x1FFFC800;
// reset systick
SysTick-›CTRL = 0;
SysTick-›LOAD = 0;
SysTick-›VAL = 0;
// disable all interrupts
//__disable_irq();
// reset RCC & interrupts
sysreset();
__DSB();
// remap 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);
SysMemBootJump();
} |
Однако, вместо переключения в бутлоадер оно просто перезапускается!
// функция sysreset ничего не перезагружает, а просто устанавливает "умолчательные" настройки для основных регистров тактирования и периферии + выключает прерывания.
Если убираю sysreset, то после перезапуска dmesg выдает ошибки считывания дескрипторов.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
11.03.2020, 18:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Решено при помощи с "радиокота":
Код:
|
void Jump2Boot(){
void (*SysMemBootJump)(void);
volatile uint32_t addr = 0x1FFFC800;
// 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 | RCC_APB1RSTR_TIM7RST | RCC_APB1RSTR_TIM6RST |
RCC_APB1RSTR_TIM3RST | RCC_APB1RSTR_TIM2RST;
RCC-›APB2RSTR = RCC_APB2RSTR_DBGMCURST | RCC_APB2RSTR_TIM17RST | RCC_APB2RSTR_TIM16RST | RCC_APB2RSTR_TIM15RST |
RCC_APB2RSTR_USART1RST | RCC_APB2RSTR_SPI1RST | RCC_APB2RSTR_TIM1RST | RCC_APB2RSTR_ADCRST | RCC_APB2RSTR_SYSCFGRST;
RCC-›AHBRSTR = 0;
RCC-›APB1RSTR = 0;
RCC-›APB2RSTR = 0;
// Enable the SYSCFG peripheral.
RCC-›APB2ENR |= RCC_APB2ENR_SYSCFGEN;
// remap 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();
} |
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
11.03.2020, 19:12
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от AJScorp
|
А можно посмотреть листинг на мой код?
|
Таки добрался, выкладываю всё что сохранил, там более менее понятно.
Код:
|
0x800'5f8c: 0x4813 LDR.N R0, [PC, #0x4c] ; GPIOC_IDR
while (~GPIOC-›IDR & (GPIO_IDR_IDR6|GPIO_IDR_IDR7))
0x800'5f8e: 0x6801 LDR R1, [R0] в R1 из адреса в [R0]
0x800'5f90: 0x43c9 MVNS R1, R1
0x800'5f92: 0xf011 0x0fc0 TST.W R1, #192 ; 0xc0
0x800'5f96: 0xd1fa BNE.N 0x800'5f8e |
Код:
|
0x800'5f8c: 0x4915 LDR.N R1, [PC, #0x54] ; GPIOC_IDR
while ((GPIOC-›IDR & GPIO_IDR_IDR6)››6 != 1 && (GPIOC-›IDR & GPIO_IDR_IDR7)››7 != 1)
0x800'5f8e: 0x6808 LDR R0, [R1]
0x800'5f90: 0xf3c0 0x1080 UBFX R0, R0, #6, #1
0x800'5f94: 0x2800 CMP R0, #0
0x800'5f96: 0xbf02 ITTT EQ
0x800'5f98: 0x6808 LDREQ R0, [R1]
0x800'5f9a: 0xf3c0 0x10c0 UBFXEQ R0, R0, #7, #1
0x800'5f9e: 0x2800 CMPEQ R0, #0
0x800'5fa0: 0xd0f5 BEQ.N 0x800'5f8e |
Без оптимизации
Код:
|
while ((GPIOC-›IDR & GPIO_IDR_IDR6)››6 != 1 && (GPIOC-›IDR & GPIO_IDR_IDR7)››7 != 1)
0x800'5e1e: 0x4918 LDR.N R1, [PC, #0x60] ; GPIOC_IDR в R1 адрес GPIOC_IDR
0x800'5e20: 0x6808 LDR R0, [R1] в R0 значение по адресу R1
0x800'5e22: 0xf3c0 0x1080 UBFX R0, R0, #6, #1 переписывает указанные биты начиная с мл бит
0x800'5e26: 0x2800 CMP R0, #0 сравнивает R0 с 0 если 0 то Z=1
0x800'5e28: 0xd104 BNE.N 0x800'5e34 если флаг Z=0 переходим по адресу
0x800'5e2a: 0x6808 LDR R0, [R1] в R0 значение по адресу R1
0x800'5e2c: 0xf3c0 0x10c0 UBFX R0, R0, #7, #1 переписывает указанные биты начиная с мл бит
0x800'5e30: 0x2800 CMP R0, #0 сравнивает R0 с 0 если 0 то Z=1
0x800'5e32: 0xd0f4 BEQ.N 0x800'5e1e если флаг Z=1 переходим по адресу |
Код:
|
while ( !((GPIOC-›IDR & GPIO_IDR_IDR6)››6 != 0) & !((GPIOC-›IDR & GPIO_IDR_IDR7)››7 != 0))
0x800'5e1e: 0x4816 LDR.N R0, [PC, #0x58] ; GPIOC_IDR
0x800'5e20: 0x6801 LDR R1, [R0]
0x800'5e22: 0x6800 LDR R0, [R0]
0x800'5e24: 0x0649 LSLS R1, R1, #25
0x800'5e26: 0xd401 BMI.N 0x800'5e2c
0x800'5e28: 0x0600 LSLS R0, R0, #24
0x800'5e2a: 0xd5f8 BPL.N 0x800'5e1e |
Код:
|
while ((GPIOC-›IDR & (GPIO_IDR_IDR6|GPIO_IDR_IDR7)) != (GPIO_IDR_IDR6|GPIO_IDR_IDR7))
0x800'5e1e: 0x4816 LDR.N R0, [PC, #0x58] ; GPIOC_IDR
0x800'5e20: 0x6800 LDR R0, [R0]
0x800'5e22: 0xf010 0x00c0 ANDS.W R0, R0, #192 ; 0xc0
0x800'5e26: 0x28c0 CMP R0, #192 ; 0xc0
0x800'5e28: 0xd1f9 BNE.N 0x800'5e1e |
Ну а это я по трём единицам пробовал
Код:
|
while ((GPIOC-›IDR & (GPIO_IDR_IDR5|(GPIO_IDR_IDR6|GPIO_IDR_IDR7))) != (GPIO_IDR_IDR5|(GPIO_IDR_IDR6|GPIO_IDR_IDR7)))
0x800'5e1e: 0x4816 LDR.N R0, [PC, #0x58] ; GPIOC_IDR
0x800'5e20: 0x6800 LDR R0, [R0]
0x800'5e22: 0xf010 0x00e0 ANDS.W R0, R0, #224 ; 0xe0
0x800'5e26: 0x28e0 CMP R0, #224 ; 0xe0
0x800'5e28: 0xd1f9 BNE.N 0x800'5e1e |
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
|
12.04.2020, 17:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Кто разобрался нормально с CAN-шиной?
Меня смущает поле CAN2SB[5:0] регистра CAN-›FMR: зачем оно вообще нужно, если у STM32F0x2 нет CAN2?
Завел два фильтра вот так:
Код:
|
CAN-›FMR = CAN_FMR_FINIT;
CAN-›FA1R = CAN_FA1R_FACT0 | CAN_FA1R_FACT1;
CAN-›sFilterRegister[0].FR1 = (1‹‹21)|(1‹‹5); // all odd IDs
CAN-›FFA1R = 2; // filter 1 for FIFO1, filter 0 - for FIFO0
CAN-›sFilterRegister[1].FR1 = (1‹‹21); // all even IDs
CAN-›FMR &=~ CAN_FMR_FINIT; |
принимает и четные, и нечетные идентификаторы...
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 12.04.2020 в 17:57.
|
|
|
|
22.04.2020, 21:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Кто-нибудь сталкивался с уровнем на PPout GPIO в 2.4В вместо 3.3?
Как я так умудрился МК спалить, что все вроде работает, но до 3.3В не дотягивают некоторые ноги (специально вообще нагрузку снял — четко на ноге МК такое напряжение!). Плата отмыта, коротить не должно...
И почему-то сопротивление между этими ногами и землей в полностью отключенном состоянии — 50..60кОм! Сгорели pullup-мосфеты?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.04.2020, 21:33
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
eddy, Нагрузи до номинальной нагрузки если выходное напряжение снизится то убиты 100%
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
|
22.04.2020, 22:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Murka-MakMur, нагружаю на резистор 330 Ом — падает с 2.4 до 2.2В.
Блин! Придется, наверное, идти на работу и перепаивать чип…
Зря я себе сразу две девборды не спаял…
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.04.2020, 22:08
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Придется, наверное, идти на работу и перепаивать чип…
|
Убиты. А это критично? Может оно и так будет работать, пока тестируешь так поиграешься, а как всё будет готово заменишь.
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:19.
|
|