Страница 1 из 1

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

Добавлено: Ср мар 21, 2018 11:36:47
Alex-Elektron
Доброго времени суток! Есть некое устройство, с которым возникла сложность: не работает 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
Reflector
Открой Datasheet, посмотри какая функция у данного пина по умолчанию, сделай ремап.

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

Добавлено: Ср мар 21, 2018 12:25:04
Alex-Elektron
Глянул, на PB3 болтается ЖЖитаг, как и на PB4. Но при этом на PB4 кнопка работает. Ремап не помог, или я что-то не так делаю.

Код: Выделить всё

AFIO->MAPR = AFIO_MAPR_SWJ_CFG_2;

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
Reflector
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3335794#p3335794"]Глянул, на PB3 болтается ЖЖитаг, как и на PB4. Но при этом на PB4 кнопка работает. Ремап не помог, или я что-то не так делаю.[/uquote]
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
Alex-Elektron
Код, значит, выглядит теперь следующим образом:

Код: Выделить всё

#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
Reflector
[uquote="Alex-Elektron",url="/forum/viewtopic.php?p=3335806#p3335806"]но пока максимум, что я вижу, это меандр амплитудой 200 мВ и частотой 417Гц[/uquote]
А что должно быть? Как думаешь, какой режим для пина ты выбрал?

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

Добавлено: Ср мар 21, 2018 13:13:46
Alex-Elektron
Push-pull, 50MHz

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