概述
STM32CUBUMX的PPM接收机解析
有关PPM协议的细节,可以查看一文打尽接收机协议
本文使用的
- 正点原子STM32F103RTC6
- FS-I6遥控器
- FS-RX2A接收机
基本
PPM解析使用下降沿触发外部中断后,使用定时器以1us进行计时,直到下一次的下降沿到来
可以看到,若油门处于最低时,接收的时间应该是1000us。处于最大时,为2000us。若接收时间大于2000us,则进入下一轮解析
CUBUMX配置
时钟等配置就按通常的来,不做赘述,本文只讲解析,可以参考【STM32】HAL库 STM32CubeMX系列学习教程
外部中断选择了PC8,配置如下
注意在NVIC里勾选中断使能开关
TIM2配置如下
使用串口来发送接收到的油门数据,配置如下
配置完成后,生成代码。
程序
PPM.C
#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
#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里
#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
开启定时器
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim2);
/* USER CODE END 2 */
测试发送
/* USER CODE BEGIN 3 */
TEST_send_message();
完成
查看GITHUB代码
参考:
- 用stm32读取遥控器接收机PPM信号各通道值
- 【STM32】HAL库STM32CubeMX系列学习教程
最后
以上就是甜美灯泡为你收集整理的使用STM32解析PPM接收机(CUBUMX HAL库 F103RCT6)的全部内容,希望文章能够帮你解决使用STM32解析PPM接收机(CUBUMX HAL库 F103RCT6)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复