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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

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

Сообщение 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 - всё прекрасно работает.
В чём кроется магия?
Реклама
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

У STM32F103 на выводе PB3 по дефолту сидит JTAG (JTDO,SWO), по этому если вы хотите использовать этот вывод то его надо выключить(только аккуратнее не выключите SWDIO или SWCLK, если выключите то можно под RESET восстановить)

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

#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE        ((uint32_t)0x02000000)        /*!< JTAG-DP Disabled and SW-DP Enabled */
    RCC->APB2ENR |=RCC_APB2Periph_AFIO;
    AFIO->MAPR   |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // 25 бит все как по даташиту JTAG-DP Disabled and SW-DP Enabled
PS:Кстати сам не давно разбирался с подобным
https://electronix.ru/forum/index.php?showtopic=146109
Реклама
Alex-Elektron
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

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

Сообщение Alex-Elektron »

Спасибо за ответ. Вопрос уже решил, просто браузер лаганул и создал два одноимённых топика. http://radiokot.ru/forum/viewtopic.php? ... 3#p3335823
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Да только, вы бы все равно прочитали тему что я скинул, так как так:

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

AFIO->MAPR |=AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
не правильно делать
правильная установка так:

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

AFIO->MAPR = (AFIO->MAPR & 0xF8FFFFFF) | AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
поспешил и сам не то выложил :?
Реклама
Эиком - электронные компоненты и радиодетали
Frogfot
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

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

Сообщение Frogfot »

Камень STM32F103C8T6, отключил JTAG, заработали PB3 и PB4 на выход, сделал мигалку на светодиоды, работают PB3 и PB5 - мигают светодиодами, а на PB4 висит низкий уровень и не меняется?

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

  RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN;

  AFIO->MAPR = (AFIO->MAPR & 0xF8FFFFFF) | AFIO_MAPR_SWJ_CFG_JTAGDISABLE;

  GPIOB->CRL |= GPIO_CRL_MODE3_1 | GPIO_CRL_MODE4_1 | GPIO_CRL_MODE5_1;

  while(1)
  {
    GPIOB->BSRR = GPIO_BSRR_BS3  | GPIO_BSRR_BS4  | GPIO_BSRR_BS5;
    for (i=0;i<2000000;i++) {  }
		
    GPIOB->BSRR = GPIO_BSRR_BR3  | GPIO_BSRR_BR4  | GPIO_BSRR_BR5;
    for (i=0;i<2000000;i++) {  }
  }
P.S.Сам разобрался - нужно было сбросить бит CNF

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

  GPIOB->CRL = GPIO_CRL_MODE3_1 | GPIO_CRL_MODE4_1 | GPIO_CRL_MODE5_1;
Хорошему коту и в декабре - март :)
Реклама
Ответить

Вернуться в «ARM»