Skocz do zawartości

Brak połączenia USART3 STM32


kajetanoss

Pomocna odpowiedź

Obecnie pracuję nad oprogramowanem do płytki storm32 (STM32F103RC). Całość piszę samodzielnie w bibliotece HAL. Mam problem, gdyż nie mogę uzyskać połączenia przez port UART. W dokumentacji płytki UART podpięty jest do PC11 i PC10. Sprawdziłem miernikiem i wszystko się zgadza. Połączenie idzie przez rezystor 1k. Wiem, że trzeba poprawnie przemapować piny, czego nie jestem pewien jak to zrobić. Bez uart nie mam szans na debugowanie.

#include "stm32f1xx.h"
#include <string.h>

I2C_HandleTypeDef myI2Chandle,myI2Chandle2;
UART_HandleTypeDef uart;

/* Private function prototypes -----------------------------------------------*/
#ifdef __GNUC__
 /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
    set to 'Yes') calls __io_putchar() */
 #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
 #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

/**
 * @brief  Retargets the C library printf function to the USART.
 * @param  None
 * @retval None
 */
PUTCHAR_PROTOTYPE
{
   /* Place your implementation of fputc here */
   /* e.g. write a character to the USART */
   HAL_UART_Transmit(&uart, (uint8_t *)&ch, 1, 100);


   return ch;
}
/* USER CODE END PFP */

void gpioInit();
void i2cInit();
void uartInit();
void sniffer();
int main(void){
SystemCoreClock = 8000000;
   HAL_Init();
   gpioInit();
   uartInit();
   i2cInit();
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
   sniffer();
   while(1){
       printf("TEXT");
       HAL_Delay(500);
   }
}

void gpioInit(){
   __HAL_RCC_GPIOB_CLK_ENABLE();
   __HAL_RCC_GPIOC_CLK_ENABLE();
   __HAL_RCC_AFIO_CLK_ENABLE();
   __HAL_AFIO_REMAP_USART3_PARTIAL();
   __HAL_RCC_USART3_CLK_ENABLE();

   GPIO_InitTypeDef myPinInit;

   myPinInit.Mode = GPIO_MODE_AF_OD;
   myPinInit.Pin = GPIO_PIN_10;
   myPinInit.Pull = GPIO_NOPULL;
   myPinInit.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(GPIOC, &myPinInit);

   myPinInit.Mode = GPIO_MODE_AF_INPUT;
   myPinInit.Pin = GPIO_PIN_11;
   HAL_GPIO_Init(GPIOC, &myPinInit);

   myPinInit.Pin = GPIO_PIN_12 | GPIO_PIN_13;
   myPinInit.Mode = GPIO_MODE_OUTPUT_PP;
   myPinInit.Pull = GPIO_NOPULL;
   myPinInit.Speed = GPIO_SPEED_FREQ_LOW;

   HAL_GPIO_Init(GPIOB, &myPinInit);

   myPinInit.Pin =  GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_10 | GPIO_PIN_11;
   myPinInit.Mode = GPIO_MODE_AF_OD;
   myPinInit.Pull = GPIO_PULLUP;
   myPinInit.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(GPIOB, &myPinInit);
}
void i2cInit(){

   __HAL_RCC_I2C1_CLK_ENABLE();
   __HAL_RCC_I2C2_CLK_ENABLE();

   myI2Chandle.Instance = I2C1;
   myI2Chandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
   myI2Chandle.Init.ClockSpeed = 100000;
   myI2Chandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
   myI2Chandle.Init.DutyCycle = I2C_DUTYCYCLE_2;
   myI2Chandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
   myI2Chandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
   myI2Chandle.Init.OwnAddress1 = 0;
   myI2Chandle.Init.OwnAddress2 = 0;
   HAL_I2C_Init(&myI2Chandle);

   myI2Chandle2.Instance = I2C2;
   myI2Chandle2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
   myI2Chandle2.Init.ClockSpeed = 100000;
   myI2Chandle2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
   myI2Chandle2.Init.DutyCycle = I2C_DUTYCYCLE_2;
   myI2Chandle2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
   myI2Chandle2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
   myI2Chandle2.Init.OwnAddress1 = 0;
   myI2Chandle2.Init.OwnAddress2 = 0;
   HAL_I2C_Init(&myI2Chandle2);
}
void uartInit(){

   uart.Instance = USART3;
   uart.Init.BaudRate = 115200;
   uart.Init.WordLength = UART_WORDLENGTH_8B;
   uart.Init.Parity = UART_PARITY_NONE;
   uart.Init.StopBits = UART_STOPBITS_1;
   uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
   uart.Init.OverSampling = UART_OVERSAMPLING_16;
   uart.Init.Mode = UART_MODE_TX_RX;
   HAL_UART_Init(&uart);
}
void sniffer(){
   for(uint8_t i=0; i<128; i++){
       if(HAL_I2C_IsDeviceReady(&myI2Chandle, i<<1, 1, 100) == HAL_OK)
           HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);

       if(HAL_I2C_IsDeviceReady(&myI2Chandle2, i<<1, 1, 100) == HAL_OK)
           HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);

   }
}
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.