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 */