最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

STM32|串口重定义

XAMPP相关 admin 45浏览 0评论

正常STM32串口重定义都是会用到微库(microLIB),如果不使用微库怎么使用printf进行打印呢?这次给大家分享一个方法,不需要使用微库也能使用printf进行打印。

//****************************************************//
// main.c文件
//****************************************************//
#include "stm32f10x.h"
#include "stdio.h"

void USART_init(uint32_t bound)
{
  GPIO_InitTypeDef GPIO_InitStruct;   //定义GPIO结构体变量
  USART_InitTypeDef USART_InitStruct;   //定义串口结构体变量

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);   //使能GPIOC的时钟

  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;   //配置TX引脚
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;   //配置PA9为复用推挽输出
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;   //配置PA9速率
  GPIO_Init(GPIOA,&GPIO_InitStruct);   //GPIO初始化函数

  GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;   //配置RX引脚
  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;   //配置PA10为浮空输入
  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;   //配置PA10速率
  GPIO_Init(GPIOA,&GPIO_InitStruct);   //GPIO初始化函数
  USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;   //发送接收模式
  USART_InitStruct.USART_Parity=USART_Parity_No;   //无奇偶校验
  USART_InitStruct.USART_BaudRate=bound;   //波特率
  USART_InitStruct.USART_StopBits=USART_StopBits_1;   //停止位1位
  USART_InitStruct.USART_WordLength=USART_WordLength_8b;   //字长8位
  USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;   //无硬件数据流控制
  USART_Init(USART1,&USART_InitStruct);   //串口初始化函数

  USART_Cmd(USART1,ENABLE);   //使能USART1
}
//int fputc(int ch,FILE *f)   //printf重定向函数
//{
//  USART_SendData(USART1,(uint8_t)ch);   //发送一字节数据
//  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);   //等待发送完成
//  return ch;
//}
int main( void )
{
  uint32_t i;
  USART_init(115200);
  while(1)
  {
    GPIO_ResetBits(GPIOC,GPIO_Pin_0);
    for(i=0;i<655350;i++);
    printf("printf test\r\n");
  }
}

 

//****************************************************//
// retarget.c文件
//****************************************************//
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
//需包含#include "stdio.h"

#include "stm32f10x.h"
#include "stdio.h"

#pragma import(__use_no_semihosting)

//标准库需要的支持函数
struct __FILE
{
  int handle;
};

FILE __stdout;

//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
  x = x;
}

//重定义fputc函数
int fputc(int ch, FILE *f)
{
  //方法1
  while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
  USART1->DR = (u8) ch;
  return ch;
  
  //方法2
  //USART_SendData(USART1,(uint8_t)ch);   //发送一字节数据
  //while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);   //等待发送完成
  //return ch;
}

–END–

转载请注明:XAMPP中文组官网 » STM32|串口重定义