此博客为记录419通信实验室智能小车+机械臂项目的进展博客
2022年10月6日
串口一对多下载与通信

实现了单片机A和单片机B的串口下载与接收
具体的操作步骤见那边写串口的文章
实现了编码器EN1和EN3的读取
Cube配置



代码配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
int GetSpeed() { short SPEED = 0;
SPEED = (short)(__HAL_TIM_GET_COUNTER(&htim2)*100)/(4*16*10); __HAL_TIM_SET_COUNTER(&htim2,0); return SPEED; }
|
int mian()里面,while(1)之前
1 2 3 4 5 6 7
| HAL_TIM_Base_Start_IT((TIM_HandleTypeDef *)&htim7);
HAL_UART_Receive_DMA(&huart1,(uint8_t*)&TargetSpeed,sizeof(TargetSpeed));
HAL_TIM_Encoder_Start(&htim4,TIM_CHANNEL_ALL); HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);
|
结果

2022年10月7日
实现了四个编码器的读取
| 定时器 |
编码器 |
| TIM2 |
EN1 |
| TIM3 |
EN2 |
| TIM4 |
EN3 |
| TIM5 |
EN4 |
2022年10月21日
实现了树莓派与STM32的收发数据测试
我们用的树莓派是4B,之前用了3B+的做了串口接收的测试,参考的是这一篇文章
树莓派3B+与STM32进行串口通讯,收数据是通了。发数据还有点问题,然后就去找了很多,发现是利用Python的Serial库进行的串口通讯
1 2 3 4 5 6
| import serial dev=serial.Serial('/dev/ttyAMA0',115200,timeout=0.5) while True: print(dev.readlins()) s= 6 dev.write("{}\r\n".format(s).encode())
|
STM32程序
这里就关系到我们之前用的串口发送接收重定义了,
1 2 3 4 5 6
| int fgetc(FILE * F) { HAL_UART_Receive (&huart1,&ch_r,1,0xffff); return ch_r; }
|
这里的HAL_UART_Receive()他在HAL库中不是阻塞式接收,也就是说scanf在32中被执行的时候并不会暂停,所以为了确保其能接收到数据,我们要将他手动改成阻塞式的
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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显示的是这样的,不影响调试,就是很丑