stm32-串口中断

实现printf

可以在串口助手里显示所打印的字符

程序:

#include"stdio.h"
#include"uart.h"
#include "stm32f10x.h"
//GPIO口初始化
void init_uart_gpio(void)
{
	GPIO_InitTypeDef pa9;
  GPIO_InitTypeDef pa10;
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 

  pa9.GPIO_Mode = GPIO_Mode_AF_PP;
  pa9.GPIO_Pin = GPIO_Pin_9;
  pa9.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init (GPIOA,&pa9);
  pa10.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  pa10.GPIO_Pin = GPIO_Pin_10;
  GPIO_Init(GPIOA, &pa10);
}
	
//串口中断初始化配置
void init_uart1(void)
{
	USART_InitTypeDef usart;
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE) ;
	
	usart .USART_BaudRate = 115200;
  usart .USART_HardwareFlowControl =USART_HardwareFlowControl_None;
  usart. USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  usart .USART_Parity = USART_Parity_No;
  usart .USART_StopBits = USART_StopBits_1;
  usart. USART_WordLength = USART_WordLength_8b;
  USART_Init (USART1,&usart) ;
}
//发送一个字节
 void  usart_sendbyte(USART_TypeDef*pUSARTx,uint8_t ch)
{
     USART_SendData(USART1,ch);
	    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET){ 
	}
 }
 //发送所有字符,不包括‘\0’
 void usart_sendstring (USART_TypeDef *pUSARTx, char *data)
{

     while(*data != '\0') {
			 usart_sendbyte(pUSARTx,*data);
       data++;
     }
}
//初始化串口中断
void init_uart_it(void)
{
	 USART_Cmd (USART1,ENABLE) ;
	//USART_ITConfig (USART1,USART_IT_RXNE,ENABLE) ;
}
//初始化总中断
void init_uart_nvic (void)
{
	NVIC_InitTypeDef nvic;
  NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
	
  nvic.NVIC_IRQChannel=USART1_IRQn;
  nvic.NVIC_IRQChannelPreemptionPriority=1;
  nvic.NVIC_IRQChannelCmd =ENABLE;
  NVIC_Init(&nvic);
}

int fputc(int ch, FILE *f)
{
	usart_sendbyte(USART1,ch);
   return ch;
}

#pragma import(__use_no_semihosting )
  struct __FILE
{
   int a;
};
  FILE  __stdout;
void _sys_exit(int x)
{
}

/*void use_microlib (void)
{
}*/
void init_uart(void)//调用函数
{
	init_uart_gpio();
	init_uart1();
  init_uart_it(); 
  init_uart_nvic();
}

主函数:

#include "stm32f10x.h"
#include"uart.h"
#include"stdio.h"
void delay()
{
    int i;
	  int j;
	   for(i=100;i>0;i--){
			 for(j=100;j>0;j--){
			 }
		 }
}
	
int main()
{
   init_uart();
   while(1){
		  delay();
      printf("hello\n");
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值