STM32CUBUMX的PPM接收机解析
有关PPM协议的细节,可以查看一文打尽接收机协议
本文使用的
- 正点原子STM32F103RTC6
- FS-I6遥控器
- FS-RX2A接收机
基本
PPM解析使用下降沿触发外部中断后,使用定时器以1us进行计时,直到下一次的下降沿到来
可以看到,若油门处于最低时,接收的时间应该是1000us。处于最大时,为2000us。若接收时间大于2000us,则进入下一轮解析
CUBUMX配置
时钟等配置就按通常的来,不做赘述,本文只讲解析,可以参考【STM32】HAL库 STM32CubeMX系列学习教程
外部中断选择了PC8,配置如下
注意在NVIC里勾选中断使能开关
TIM2配置如下
使用串口来发送接收到的油门数据,配置如下
配置完成后,生成代码。
程序
PPM.C
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#include "ppm.h" uint16_t PPM_Sample_Cnt = 0;//通道 uint8_t PPM_Chn_Max = 8;//最大通道数 uint32_t PPM_Time = 0;//获取通道时间 uint16_t PPM_Okay = 0;//下一次解析状态 uint16_t PPM_Databuf[8] = {0};//所有通道的数组 //PPM解析中断回调函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==GPIO_PIN_8)//判断是否为接收器产生的中断,例程设置为PIN8 { PPM_Time = TIM2 ->CNT;//将定时数转存 TIM2 -> CNT = 0;//计数器归零 if (PPM_Okay == 1)//判断是否是新的一轮解析 { PPM_Sample_Cnt++;//通道数+1 PPM_Databuf[PPM_Sample_Cnt - 1] = PPM_Time;//把每一个通道的数值存入数组 if (PPM_Sample_Cnt >= PPM_Chn_Max)//判断是否超过额定通道数 PPM_Okay = 0; } if (PPM_Time >= 2050)//长时间无下降沿即无通道数据,进入下一轮解析 { PPM_Okay = 1; PPM_Sample_Cnt = 0; } } } void TEST_send_message(void) { for (uint8_t i = 0; i < PPM_Chn_Max; i++) printf("chn%d:%dn", i+1, PPM_Databuf[i]); HAL_Delay(100); }
ppm.h
复制代码
1
2
3
4
5
6
7
8
9
10
11
12#ifndef __PPM_H__ #define __PPM_H__ #include "gpio.h" #include "tim.h" void PPM_Init(void); void TEST_send_message(void); #endif /* __PPM_H__*/
重构串口发送函数
放到usart.c里
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#include "stdio.h" /** * 函数功能: 重定向c库函数printf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); return ch; } /** * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ int fgetc(FILE *f) { uint8_t ch = 0; HAL_UART_Receive(&huart1, &ch, 1, 0xffff); return ch; }
main.c
开启定时器
复制代码
1
2
3
4/* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim2); /* USER CODE END 2 */
测试发送
复制代码
1
2
3/* USER CODE BEGIN 3 */ TEST_send_message();
完成
查看GITHUB代码
参考:
- 用stm32读取遥控器接收机PPM信号各通道值
- 【STM32】HAL库STM32CubeMX系列学习教程
最后
以上就是甜美灯泡最近收集整理的关于使用STM32解析PPM接收机(CUBUMX HAL库 F103RCT6)的全部内容,更多相关使用STM32解析PPM接收机(CUBUMX内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复