学习测试雷达同步板 & 完成外部硬件触发装置
2020.07.27~2020.07.31、2020.08.03
1.任务
1)学习现有雷达同步板,测试现有雷达同步板精度
2)STM32实现用串口接收四位数,接收到瞬间一发出高电平,并且根据数字大小设置高电平持续时间
3)使用boost::asio库在ubuntu系统上写一个周期性向串口发送信息的类
2.环境 & 工具
STM32F103RCT6
串口USB转接线
上面两个东西要看原理图,硬件连接和代码管脚选择需要它们
1) 同步板
STM32F103RCT6 和 扩展板
示波器RIGOL-DS2072A
2)windows
STM32CubeMX
Keil5
XCOM
FlyMCU
3)ubuntu16.04
ROS kinetic
cutecom
3.准备工作
3.1 同步板部分
读已有代码,了解大致功能
提供的说明与测试不符,所以先用万用表将每个管脚的定义分清楚
3.2 STM32部分
STM32CubeMX新建项目,进行配置:
- 一个输出管脚
- 一组串口USART
- 时钟相关配置
生成代码,用keil5打开项目
3.3 ubuntu部分
创建工作空间,创建包
vscode配置
以上实习记录(一)中有记录
4.代码
4.1 同步板部分
无
4.2 STM32部分
//第一处代码
/* USER CODE BEGIN 2 */
//测试提示用
//HAL_UART_Transmit(&huart1, (uint8_t *)"初始化成功", 12, 0xFFFF);
/* USER CODE END 2 */
//第二处代码
/* USER CODE END WHILE */
char rx_message[RXSIZE] = {
0};
uint16_t rx_int = 0;
/* USER CODE END 2 */
HAL_UART_Receive(&huart1, (uint8_t *)&rx_message, RXSIZE, 0xffff);
//HAL_UART_Transmit(&huart1, (uint8_t *)&rx_message, RXSIZE, 0xffff);
while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);
for (int i = 0; i < RXSIZE; i++) {
rx_int = rx_int + ((int)rx_message[i] - 48) * pow(10, RXSIZE - i - 1);
}
//HAL_UART_Transmit(&huart1, (uint8_t *)&rx_int, RXSIZE, 0xffff);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
HAL_Delay(rx_int);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
/* USER CODE BEGIN 3 */
4.3 ubuntu部分
//main.cpp
#include "writer_handler.h"
#include <boost/thread/thread.hpp>
int main(int argc, char* argv[])
{
std::cout << "Program Start ..." << std::endl;
xxxx::SerialPortWriter my_sp("/dev/ttyUSB0", 115200);
while (1)
{
try
{
my_sp.serialWrite("0010");
}
catch (std::exception& err)
{
std::cout << err.what() << std::endl;
}
boost::this_thread::sleep