STM32中整型数和字符的相互转换

//整形转字符,stm32不支持标准的itoa,这里自己实现
char *myitoa(int value, char *string, int radix)
{
    int     i, d;
    int     flag = 0;
    char    *ptr = string;

    /* This implementation only works for decimal numbers. */
    if (radix != 10)
    {
        *ptr = 0;
        return string;
    }

    if (!value)
    {
        *ptr++ = 0x30;
        *ptr = 0;
        return string;
    }

    /* if this is a negative value insert the minus sign. */
    if (value < 0)
    {
        *ptr++ = '-';

        /* Make the value positive. */
        value *= -1;
    }

    for (i = 10000; i > 0; i /= 10)
    {
        d = value / i;

        if (d || flag)
        {
            *ptr++ = (char)(d + 0x30);
            value -= (d * i);
            flag = 1;
        }
    }

    /* Null terminate the string. */
    *ptr = 0;

    return string;

} /* NCL_Itoa */

//字符串转整形,stm32不支持标准的atoi,这里自己实现
int myatoi(const char *str)
{
	int s=0;
	uint8_t falg=0;
	
	while(*str==' ')
	{
		str++;
	}

	if(*str=='-'||*str=='+')
	{
		if(*str=='-')
		falg=1;
		str++;
	}

	while(*str>='0'&&*str<='9')
	{
		s=s*10+*str-'0';
		str++;
		if(s<0)
		{
			s=2147483647;
			break;
		}
	}
	return s*(falg?-1:1);
}

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,接下来我将为您介绍STM32F103C8T6串口2的初始化方法和如何发送整数。 首先,进行串口2的初始化,步骤如下: 1. 开启串口2时钟:使能GPIOA时钟和USART2时钟 ``` RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE); ``` 2. 配置GPIO引脚 ``` GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //USART2_TX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //USART2_RX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); ``` 3. 配置USART2 ``` USART_InitStructure.USART_BaudRate = 115200; //波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位数 USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位数 USART_InitStructure.USART_Parity = USART_Parity_No; //校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //接收发送模式 USART_Init(USART2, &USART_InitStructure); ``` 4. 使能USART2 ``` USART_Cmd(USART2, ENABLE); ``` 接下来,我们来看如何发送整数: ``` #include <stdio.h> #include <string.h> void USART2_SendInt(int num) { char str[16]; sprintf(str, "%d\r\n", num); //将整数转换字符串 USART2_SendString(str); //调用发送字符串函数 } void USART2_SendString(char *str) { while (*str) { USART_SendData(USART2, (uint8_t)*str++); while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); } } ``` 以上代码,我们定义了一个函数`USART2_SendInt`,用于发送整数。该函数将整数转换字符串,然后调用发送字符串函数`USART2_SendString`发送数据。发送字符串函数的实现与之前介绍的USART2_SendChar函数相似,不再赘述。 使用方法如下: ``` USART2_SendInt(1234); //发送整数1234 ``` 希望这些代码能够帮助您完成STM32F103C8T6串口2的初始化和发送整数的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值