STM32
直播中

宜家

8年用户 1110经验值
私信 关注
[问答]

使能浮点是什么意思?

使能浮点是什么意思?

回帖(1)

陈思阳

2021-11-25 11:25:40
#include "stdio.h"


#ifdef __GNUC__
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    #define GETCHAR_PROTOTYPE int __io_getchar(FILE *f)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)   
    #define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif


//HAL库
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart3, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
  return ch;
}


GETCHAR_PROTOTYPE
{
  uint8_t  ch;
  HAL_UART_Receive(&huart3,(uint8_t *)&ch, 1, HAL_MAX_DELAY);
  return  ch;
}


//寄存器
PUTCHAR_PROTOTYPE
{        
        while((USART3->ISR & UART_FLAG_TC) == RESET);
        USART3->TDR=(uint8_t)ch;      
        return ch;
}


GETCHAR_PROTOTYPE
{
        while((USART3->ISR & UART_FLAG_RXNE) == RESET);
        return (uint8_t)(USART3->RDR);
}


注意:printf()和scanf()都是用轮询方式,没有使用中断。调用scanf()在串口助手中输入数据时,必须以空格结束,然后点击发送,否则无法完成发送。


使用标准库(__use_no_semihosting)


#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
    int handle;
};
FILE __stdout;   
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
    x = x;
}
int fputc(int ch, FILE *f)
{      
        while((USART3->ISR & UART_FLAG_TC) == RESET);
        USART3->TDR=(uint8_t)ch;      
    return ch;
}


把printf重新宏定义了一下,使用时候就可以使用自己的函数,不想开printf时候改掉宏定义就好了


#define log(...) printf(__VA_ARGS__)
1
重写printf


#include   
#include   


void  USART3_Printf (const  void *format, ...)  
{  
  static uint8_t Buff[100];
  va_list args;
  uint32_t Len;


  va_start(args, format);
  Len = vsnprintf((char *)Buff, 100, (char *)format, args);
  va_end(args);
  HAL_UART_Transmit(&huart3, (uint8_t *)Buff, Len, 1000);
}


使能浮点



举报

更多回帖

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