Zastosowałem się do rad, kod wygląda tak:
#include "stm32f4xx.h"
#include <stdio.h>
void send_char(char c){
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, c);
}
void send_string(const char* s){
while (*s)
send_char(*s++);
}
volatile uint32_t timer_ms = 0;
void SysTick_Handler()
{
if (timer_ms) {
timer_ms--;
}
}
void delay_ms(int time)
{
timer_ms = time;
while (timer_ms) {};
}
int main(void)
{
GPIO_InitTypeDef gpio;
USART_InitTypeDef usart;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2);
GPIO_StructInit(&gpio);
USART_StructInit(&usart);
//LED
gpio.GPIO_Pin = GPIO_Pin_7;
gpio.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOB, &gpio);
//USART
//Tx
gpio.GPIO_Pin=GPIO_Pin_5;
gpio.GPIO_Mode=GPIO_Mode_AF;
GPIO_Init(GPIOD,&gpio);
//Rx
gpio.GPIO_Pin=GPIO_Pin_6;
gpio.GPIO_Mode=GPIO_Mode_IN;
GPIO_Init(GPIOD,&gpio);
//USART Config
usart.USART_BaudRate = 115200;
USART_Init(USART2,&usart);
USART_Cmd(USART2,ENABLE);
SysTick_Config(SystemCoreClock / 1000);
while(1){
GPIO_SetBits(GPIOB, GPIO_Pin_7);
delay_ms(100);
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
delay_ms(100);
send_string("Hello\r\n");
}
}
i nadal nic... Zaczynam myśleć, że jest to problem ze sterownikami, gdyż po napisaniu tego programu dioda działa jak powinna i w momencie jej zapalenia powinienem mieć komunikat, a komunikatu brak.
P.S. Zrobione! 4dni kombinowania i działa. Zmiana w rejestrach, dokładne przeczytanie dokumentacji, lekka modyfikacja i działa jak powinno!