第一次写博客,主要是想记录一下学习历程,以后可以回过头来看看。
话不多说,进入正题,这个通过蓝牙与32的USART配合,
直接通过串口助手发送可以修改想修改的参数
(我这个程序比较初级,需要在程序的枚举类型里提前
添加可能需要修改的元素,如果有更好的方法,还请教教我 ♪(´∇`*) )
例如:
kpz=150\n(这里我设置'\n'为结束标志)
#include"stdio.h"
#include "stdlib.h"
#include"string.h"
#include"usart.h"
float dezhi;
char* xuanze;
//下面的命名规则是在需要改的变量名后加个r,以作区别
enum {
kpzr=1,
kdzr,
kpvr,
kivr,
resetr,
}k;
//////////////////////////////////////////////
void USART1_IRQHandler(void)
{
static int i=0;
static char a[100];
char str1[100],b[100];
/*中断里是对输入的字符串做处理,分出目标变量名
与目标值,并将目标值转为浮点型*/
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){
a[i]=USART_ReceiveData(USART1);
i++;
if(a[i-1]=='\n'){
sscanf(a,"%[^=]",b);
xuanze=b;
sscanf(a+strlen(b)+1,"%[^\n]",str1);
dezhi=atof(str1);
i=0;
}
}
USART_ClearFlag(USART1,USART_FLAG_RXNE);
USART_ClearITPendingBit(USART1,USART_FLAG_RXNE);
}
int main(void)
{
while(1)
{
//此处加判断可以减少不必要的if判断
if(xuanze!=NULL)
{
if(!strcmp(xuanze,"kpz")){
k=kpzr;
xuanze=NULL;
goto sw;
}
if(!strcmp(xuanze,"kdz")){
k=kdzr;
xuanze=NULL;
goto sw;
}
if(!strcmp(xuanze,"kpv")){
k=kpvr;
xuanze=NULL;
goto sw;
}
if(!strcmp(xuanze,"kiv")){
k=kivr;
xuanze=NULL;
goto sw;
}
if(!strcmp(xuanze,"reset")){
k=resetr;
xuanze=NULL;
goto sw;
}
sw:
switch(k)
{
case kpzr: kpz=dezhi;break;
case kdzr: kdz=dezhi;break;
case kpvr: kpv=dezhi;break;
case kivr: kiv=dezhi;break;
case resetr: kpz=0;kdz=0;kpv=0;kiv=0;break;
}
}
}
}
可能有些小错误,因为是我现写的,纯手打,有错还请指出,谢谢。
本文介绍了一个基于STM32的程序,通过蓝牙与USART配合,允许用户通过串口助手直接发送命令来修改预定义的参数,如kpz、kdz等。程序通过枚举类型提前定义了可修改的元素,接收到的命令会被解析并应用到相应的变量上。
1165





