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

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

Ср мар 21, 2018 11:38:04

Доброго времени суток! Есть некое устройство, с которым возникла сложность: не работает 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

Пт мар 23, 2018 08:26:03

У 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

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

Пт мар 23, 2018 08:40:07

Спасибо за ответ. Вопрос уже решил, просто браузер лаганул и создал два одноимённых топика. viewtopic.php?f=59&t=153565&p=3335823#p3335823

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

Пт мар 23, 2018 18:03:01

Да только, вы бы все равно прочитали тему что я скинул, так как так:
Код:
AFIO->MAPR |=AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
не правильно делать
правильная установка так:
Код:
AFIO->MAPR = (AFIO->MAPR & 0xF8FFFFFF) | AFIO_MAPR_SWJ_CFG_JTAGDISABLE;

поспешил и сам не то выложил :?

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

Пн апр 08, 2019 19:03:14

Камень 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;
Ответить