此博客为记录419通信实验室智能小车+机械臂项目的进展博客
2022年10月6日
串口一对多下载与通信
实现了单片机A和单片机B的串口下载与接收
具体的操作步骤见那边写串口的文章
实现了编码器EN1和EN3的读取
Cube配置
代码配置
/* USER CODE BEGIN 4 */
/******************************
功能:每5ms在定时器中执行一次,
获取电机速度SPEED
返回值:电机速度SPEED
形参:无
*******************************/
int GetSpeed()
{
short SPEED = 0;
// static short last = 0;
SPEED = (short)(__HAL_TIM_GET_COUNTER(&htim2)*100)/(4*16*10);//哪个定时器对应不同的编码器
__HAL_TIM_SET_COUNTER(&htim2,0);
return SPEED;
}
/* USER CODE END 4 */
int mian()里面,while(1)之前
/*打开定时器中断*/
HAL_TIM_Base_Start_IT((TIM_HandleTypeDef *)&htim7);
/*开启串口DMA接收,默认DMA为循环模式,千万不要放在循环里!!*/
HAL_UART_Receive_DMA(&huart1,(uint8_t*)&TargetSpeed,sizeof(TargetSpeed));
/*打开编码器捕获*/
HAL_TIM_Encoder_Start(&htim4,TIM_CHANNEL_ALL);//这是EN3
HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);//这是EN1
结果
2022年10月7日
实现了四个编码器的读取
定时器 | 编码器 |
---|---|
TIM2 | EN1 |
TIM3 | EN2 |
TIM4 | EN3 |
TIM5 | EN4 |
2022年10月21日
实现了树莓派与STM32的收发数据测试
我们用的树莓派是4B,之前用了3B+的做了串口接收的测试,参考的是这一篇文章
树莓派3B+与STM32进行串口通讯,收数据是通了。发数据还有点问题,然后就去找了很多,发现是利用Python的Serial库进行的串口通讯
import serial
dev=serial.Serial('/dev/ttyAMA0',115200,timeout=0.5)#读取串口号,设置波特率,连接超时0。5秒
while True:
print(dev.readlins())#读显示出串口的数据
s= 6
dev.write("{}\r\n".format(s).encode())#将s写入串口中
STM32程序
这里就关系到我们之前用的串口发送接收重定义了,
/*fgetc*/
int fgetc(FILE * F)
{
HAL_UART_Receive (&huart1,&ch_r,1,0xffff);//接收
return ch_r;
}
这里的HAL_UART_Receive()他在HAL库中不是阻塞式接收,也就是说scanf在32中被执行的时候并不会暂停,所以为了确保其能接收到数据,我们要将他手动改成阻塞式的
/* USER CODE BEGIN 3 */
printf("Aaaa\n");
printf("1145141919810\n");
printf("woshiA\n");
HAL_Delay(1000);
n=0;
while(n == 0)
{
scanf("%d",&n);
}//使其变成手动的阻塞式接收
HAL_Delay(1000);
printf("output:%d",n);
HAL_Delay(1000);
接收发送成功截图
这里的output就是收到的数据,但是不知道为啥这个minicom显示的是这样的,不影响调试,就是很丑