Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

MengFanjun的博客

此博客为记录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
/* 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)之前

1
2
3
4
5
6
7
/*打开定时器中断*/
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库进行的串口通讯

1
2
3
4
5
6
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程序

这里就关系到我们之前用的串口发送接收重定义了,

1
2
3
4
5
6
/*fgetc*/
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
/* 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显示的是这样的,不影响调试,就是很丑

评论