亚博八路循迹模块串口代码开源
网上八路循迹模块开源大多都是读取gpio电平判断传感器是否被识别如果遇到板子的IO口剩余不多的情况只能使用串口或者IIC由于我有现成的串口端口可用所以。。。这是官方的文档网址8-Channel Tracking Module我用元宝翻译的中文如上图描述需要给传感器发如下初始化代码传感器才会给单片机发送信息如果是裸机就放while死循环上面如果是freertos任务就放在任务初始化里面。个人经验发送函数前得延时1s// 初始化功能如下 // 1. Need to calibrate: $1,0,0# // 2. Need digital type: $0,0,1# // 3. Need analog type: $0,1,0# // 4. Need digital and analog type: $0,1,1# void SET_Eight_Mode(uint8_t cal, uint8_t analog, uint8_t digital) { char buf[7]; /* 拼出 $cal,analog,digital# */ buf[0] $; buf[1] 0 cal; buf[2] ,; buf[3] 0 analog; buf[4] ,; buf[5] 0 digital; buf[6] #; HAL_UART_Transmit(huart3, (uint8_t*)buf, 7, 100); }下面是数据包解析代码因为一些原因导致的包整体错位所以加上for循环找包头如果没这个问题的就把for循环去掉i相当于0就行了。void Parse_Trace_Data(void) { for(uint16_t i 0; i 44; i) { if(rx_buf[i] $ rx_buf[i1] D rx_buf[i42] #) { uint8_t *ptr rx_buf i 3; for(uint8_t ch 0; ch 8; ch) { ptr 3; uint8_t val 0; while(*ptr 0 *ptr 9) { val val * 10 (*ptr - 0); ptr; } trace_data.digital_values[ch] val; ptr; } trace_data.data_type D; trace_data.data_ready 1; break; } } }把代码放在串口中断处理函数void USART3_IRQHandler(void) { /* USER CODE BEGIN USART3_IRQn 0 */ /* USER CODE END USART3_IRQn 0 */ HAL_UART_IRQHandler(huart3); /* USER CODE BEGIN USART3_IRQn 1 */ Parse_Trace_Data(); HAL_UART_Receive_IT(huart3,rx_buf,sizeof(rx_buf)); /* USER CODE END USART3_IRQn 1 */ }over