Actualmente estoy desarrollando software para la placa Storm32, escribo todo el código desde el principio por mi cuenta. El problema es que no puedo inicializar la conexión a través de UART. Verifico que la documentación de la placa y el TX / RX estén conectados mediante una resistencia de 1k a PC10 y PC11. Probé la conexión con el multímetro, todo parecía estar bien. Cuando probé la conexión I2C, estaba funcionando correctamente. Tal vez haya un problema en mi código, porque no sé, si el remmaping de mis pines se está iniciando correctamente. Los pines 12B y 13B están conectados a leds.
#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);
}
}