Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 11:36:47

Доброго времени суток! Есть некое устройство, с которым возникла сложность: не работает PB3 ни на вход, ни на выход (вообще, рассчитан на вход). Решил проверить, не виноват ли дветысячистрочный код, написал простую дрыгалку, хотел проверить, работает ли хотя бы выход:
#include "stm32f10x.h"

int main(){
SystemInit();

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOB->CRL |= GPIO_CRL_MODE3;

while(1){
GPIOB->ODR ^= GPIO_ODR_ODR3;
for(uint32_t i=0; i<7200; i++);
}
}


Щупаю осциллом - кроме 0,3В постоянки при включении питания МК нифига нет.
Настраиваю на вход+внешняя подтяжка - МК воспринимает этот вход как постоянно прижатую к земле кнопку, но на ней по факту +3.28В!!!
Проверял ан КЗ с соседними ногами, питанием - чисто.
Следующая мысль: сдох вывод, меняем МК. Подумано - сделано. Эффект=0, всё то же самое, что и с предыдущим.
Впихиваю вместо PB3 PB5 - всё прекрасно работает.
В чём кроется магия?

Re: STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 11:53:32

Открой Datasheet, посмотри какая функция у данного пина по умолчанию, сделай ремап.

Re: STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 12:25:04

Глянул, на PB3 болтается ЖЖитаг, как и на PB4. Но при этом на PB4 кнопка работает. Ремап не помог, или я что-то не так делаю.

Код:
AFIO->MAPR = AFIO_MAPR_SWJ_CFG_2;
Вложения
2018-03-21_15-09-33.png
(46.73 KiB) Скачиваний: 709

Re: STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 12:27:40

На PB3 один из выводов JTAG. Нужно добавить в код строку.
Код:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
Это отключит JTAG, но оставит интерфейс SWD.

Re: STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 12:38:06

Глянул, на PB3 болтается ЖЖитаг, как и на PB4. Но при этом на PB4 кнопка работает. Ремап не помог, или я что-то не так делаю.

JTDO на PB3 - это выход, а JNTRST на PB4 - вход, потому не удивительно, что кнопка работает.

Код:
AFIO->MAPR = AFIO_MAPR_SWJ_CFG_2;

Если отладчик по SWD используется, то нужно AFIO_MAPR_SWJ_CFG_JTAGDISABLE(AFIO_MAPR_SWJ_CFG_1), но в целом все верно. Только перед этим еще нужно для альтернативных функций включить тактирование(RCC_APB2ENR_AFIOEN).

Re: STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 12:47:49

Код, значит, выглядит теперь следующим образом:
Код:
#include "stm32f10x.h"

int main(){
   SystemInit();

   RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
   RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;

   AFIO->MAPR |=AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
   GPIOB->CRL |= GPIO_CRL_MODE3;

   while(1){
      for(uint32_t i=0; i<7200; i++);
      GPIOB->ODR ^= GPIO_ODR_ODR3;
   }
}


но пока максимум, что я вижу, это меандр амплитудой 200 мВ и частотой 417Гц

Re: STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 13:05:37

но пока максимум, что я вижу, это меандр амплитудой 200 мВ и частотой 417Гц

А что должно быть? Как думаешь, какой режим для пина ты выбрал?

Re: STM32F103 Не работает вход/выход PB3

Ср мар 21, 2018 13:13:46

Push-pull, 50MHz

Добавлено after 3 minutes 3 seconds:
Баллииин, CNF3 не вырубил. Всё, решена задачка, спасибо большое!
Ответить