STM32开发串口通信常用的串操作函数

51 篇文章 1 订阅
44 篇文章 1 订阅

1、memset()函数

        原型为void *memset(void *buf,int val,int len),原型的位置在string.h中,其功能是将存储区的内容设置成指定值。buf为所要设置存储区的首地址,val为所要设置的值,len为所要设置存储区的长度,函数的返回值为所设置存储区的首地址。

例如将数组buf[]中前10字节的内容设置为0xff的程序段如下:

memset(buf,0xff,10);

串口通信中常用的是在处理完串口接收数组的数据后,将串口接收数组及时清零,例如:

memset(UserRxBuf,0,UserRxCnt);(UserRxCnt为串口接收计数值)

2、strlen()函数

        原型为unsigned int strlen(const char *str),原型的位置在string.h中,功能是计算串的长度,其中参数str表示串的首地址,返回值为串中字符的个数。

例如语句len=strlen("STM32");执行后,len的值为5

3、sprintf()函数

        原型为int sprintf(char *buf,const char *format,[argument]);其原型的位置在stdio.h文件中,功能是将格式化数据保存至指定的缓冲区中,

参数buf是要存放格式化数据的缓冲区的指针,即首地址;

format为格式化字符串,可以是需要原样输出的正常字符串,也可以是以%开头的格式规定字符,如%d、%s、%f等,其用法和要求与printf的format参数一样。

argument是所需输出的参数;

返回值:若写入成功,则返回实际写入缓冲区的字符个数,若写入失败,则返回-1。

例1,将ADC采集的数据传输至OLED显示屏显示就需要sprintf函数做转化

//更新ADC采样数据与换算结果
void OLED_display_dat()
{
    sprintf((char*)str_buff, "%4d", ADC0_Value);
    OLED_ShowString(64,3,(uint8_t *)str_buff);
    sprintf((char*)str_buff, "%d.%d%dV", ADC_Volt/100, (ADC_Volt%100/10), ADC_Volt%10);
    OLED_ShowString(64,6,(uint8_t *)str_buff);
}
while (1)
{
    LED1_ON();			//ADC采样指示灯点亮
    Get_ADC0_Value();		//进行一次ADC采样及逻辑处理
    OLED_display_dat();		//更新OLED中的采样数据
    HAL_Delay(200);		//延时0.2秒
    LED1_OFF();			//ADC采样指示灯关闭
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

例2,使用串口格式化输出显示采集的ADC值

void UR1_Send_Info()
{
    sprintf((char *)str_buff,"采样值:%d,电压值:%d.%d%dV\r\n",ADC0_Value,ADC0_Volt/100,(ADC0_Volt%100)/10,ADC0_Volt%10);
    HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
}
//在mian()函数中添加以下代码:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    Get_ADC_Value();        //启动一个阻塞式的ADC转换并读取数据
    UR1_Send_Info();        //向上位机发生采样值和电压值
    HAL_Delay(500);         //延时0.5秒,再进行下一次ADC采样
   /* USER CODE END WHILE */
   /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jacklood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值