STM32
直播中

lalajie

8年用户 1213经验值
擅长:模拟技术 存储技术
私信 关注
[问答]

如何去实现stm32串口中断printf函数呢

实现printf就可以在串口助手里显示所打印的字符了吗?
如何去实现STM32串口中断printf函数呢?

回帖(2)

杨桂英

2021-11-17 11:00:19
1
举报

朱志兴

2021-11-17 11:00:23
  实现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){
  }
  }
  //发送所有字符,不包括‘’
  void usart_sendstring (USART_TypeDef *pUSARTx, char *data){
  while(*data != ‘’)
  {
  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(“hellon”);
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分