国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2024年12月04日(星期三)

正在發(fā)生

2019年12月04日 | 解決STM8類型單片機(jī)空間太小,使用不了printf串口打印問(wèn)題

發(fā)布者:Tiger8 來(lái)源: eefocus關(guān)鍵字:STM8  單片機(jī)空間太小  printf  串口打印 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

概述:


在使用STM8L101F3這款單片機(jī)時(shí),由于它只有8K的flash,空間非常小,只要調(diào)用C庫(kù)函數(shù)printf編譯后整個(gè)文件很大,直接程序溢出。這也就意味著我們實(shí)現(xiàn)printf串口打印調(diào)試就沒(méi)辦法進(jìn)行。既然使用不了庫(kù)函數(shù),那么我們就可以自己動(dòng)手封裝類似printf的函數(shù),這樣我們就可以實(shí)現(xiàn)數(shù)據(jù)串口打印啦。這里就直接放上我的STM8L101F3的部分源碼了,希望可以給你一些參考。


源碼:


#include "stdarg.h"

#include "stm8l10x.h"

 

void USART_Config(void)

{

    /*Set the USART RX and USART TX at high level*/

    GPIO_ExternalPullUpConfig(GPIOC,GPIO_Pin_3|GPIO_Pin_4, ENABLE);

    /* Enable USART clock */

    CLK_PeripheralClockConfig(CLK_Peripheral_USART, ENABLE);

    USART_DeInit();

    USART_Init((uint32_t)9600, USART_WordLength_8D, USART_StopBits_1,

                USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Rx | USART_Mode_Tx));

    USART_Cmd(DISABLE);

    enableInterrupts();

    USART_Cmd(ENABLE);    

}

 

/*發(fā)送串口數(shù)據(jù)*/

void send_uart_data(uint8_t data)

{

  while (USART_GetFlagStatus(USART_FLAG_TXE) == RESET);

  USART_SendData8(data);

}

 

/*

  功能:將int型數(shù)據(jù)轉(zhuǎn)為2,8,10,16進(jìn)制字符串

  參數(shù):value --- 輸入的int整型數(shù)

        str --- 存儲(chǔ)轉(zhuǎn)換的字符串

        radix --- 進(jìn)制類型選擇

  注意:8位單片機(jī)int字節(jié)只占2個(gè)字節(jié)

*/

char *sky_itoa(int value, char *str, unsigned int radix)

{

  char list[] = "0123456789ABCDEF";

  unsigned int tmp_value;

  int i = 0, j, k = 0;

  if (NULL == str) {

    return NULL;

  }

  if (2 != radix && 8 != radix && 10 != radix && 16 != radix) {

    return NULL;

  }

  if (radix == 10 && value < 0) {

    //十進(jìn)制且為負(fù)數(shù)

    tmp_value = (unsigned int)(0 - value);

    str[i++] = '-';

    k = 1;

  } else {

    tmp_value = (unsigned int)value;

  }

  //數(shù)據(jù)轉(zhuǎn)換為字符串,逆序存儲(chǔ)

  do {

    str[i ++] = list[tmp_value%radix];

    tmp_value /= radix;

  } while(tmp_value);

  str[i] = '