資源簡介
在STM32F407單片機上實現完整的Futaba S.BUS協議。使用DMA雙向數據傳輸。

代碼片段和文件信息
#include?“sbus.h“
#include?“stdio.h“
typedef?struct?SBUS
{
uint8_t?head;
uint8_t?ch[22]; //16個通道編碼
struct?
{
bool?ch17?:1; //通道17
bool?ch18?:1; //通道18
bool?framlost?:1;
bool?failsafe :1;
uint8_t?:4;
}flage;
uint8_t?endbyte; //尾字節
}SBUS;
typedef?SBUS?CHIN;
CHIN?code??=?{.head?=?0XFF?.endbyte?=?0X66}; //接受偵
SBUS?ocode?=?{.head?=?0X0F?.endbyte?=?0X40}; //發送幀
void?SBUS_init(void)//初始化串口?DMA?定時器
{
DMA_InitTypeDef??DMA_InitStructure;
GPIO_InitTypeDef?GPIO_InitStructure;
USART_InitTypeDef?USART_InitStructure;
NVIC_InitTypeDef?NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOCENABLE);?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2ENABLE);
GPIO_PinAFConfig(GPIOCGPIO_PinSource7GPIO_AF_USART6);?
GPIO_PinAFConfig(GPIOCGPIO_PinSource6GPIO_AF_USART6);?
GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_6?|?GPIO_Pin_7;?
GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType?=?GPIO_OType_PP;?//推挽復用輸出
GPIO_InitStructure.GPIO_PuPd?=?GPIO_PuPd_UP;?//上拉
GPIO_Init(GPIOC&GPIO_InitStructure);?
USART_InitStructure.USART_BaudRate?=?100000;//100K
USART_InitStructure.USART_WordLength?=?USART_WordLength_9b;//字長為9位數據格式
USART_InitStructure.USART_StopBits?=?USART_StopBits_2;//一個停止位
USART_InitStructure.USART_Parity?=?USART_Parity_Even;//偶校驗位
USART_InitStructure.USART_HardwareFlowControl?=?USART_HardwareFlowControl_None;//無硬件數據流控制
USART_InitStructure.USART_Mode?=?USART_Mode_Rx?|?USART_Mode_Tx; //收發模式
??USART_Init(USART6?&USART_InitStructure);
??USART_Cmd(USART6?ENABLE);?
USART_ITConfig(USART6?USART_IT_IDLE?ENABLE); //開啟總線空閑中斷
NVIC_InitStructure.NVIC_IRQChannel?=?USART6_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//搶占優先級3
NVIC_InitStructure.NVIC_IRQChannelSubPriority?=3; //子優先級3
NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;
NVIC_Init(&NVIC_InitStructure);
//usart6_tx
while?(DMA_GetCmdStatus(DMA2_Stream6)?!=?DISABLE){}//等待DMAs2可配置?
DMA_InitStructure.DMA_Channel?=?DMA_Channel_5;??//通道選擇
??DMA_InitStructure.DMA_PeripheralbaseAddr?=?(u32)&USART6->DR;//DMA外設地址
??DMA_InitStructure.DMA_Memory0baseAddr?=?NULL;//DMA?存儲器0地址
??DMA_InitStructure.DMA_DIR?=?DMA_DIR_MemoryToPeripheral;//存儲器到外設模式
??DMA_InitStructure.DMA_BufferSize?=?0;//數據傳輸量?
??DMA_InitStructure.DMA_PeripheralInc?=?DMA_PeripheralInc_Disable;//外設非增量模式
??DMA_InitStructure.DMA_MemoryInc?=?DMA_MemoryInc_Enable;//存儲器增量模式
??DMA_InitStructure.DMA_PeripheralDataSize?=?DMA_PeripheralDataSize_Byte;//外設數據長度:8位
??DMA_InitStructure.DMA_MemoryDataSize?=?DMA_MemoryDataSize_Byte;//存儲器數據長度:8位
??DMA_InitStructure.DMA_Mode?=?DMA_Mode_Normal;//?使用普通模式?
??DMA_InitStructure.DMA_Priority?=?DMA_Priority_Medium;//中等優先級
??DMA_InitStructure.DMA_FIFOMode?=?DMA_FIFOMode_Disable;?????????
??DMA_InitStructure.DMA_FIFOThreshold?=?DMA_FIFOThreshold_Full;
??DMA_InitSt
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????12425??2018-08-30?00:30??sbus.c
?????文件????????858??2018-08-30?00:30??sbus.h
-----------?---------??----------?-----??----
????????????????13283????????????????????2
- 上一篇:666.txt
- 下一篇:百度網盤資源鏈接及密碼分享.doc
評論
共有 條評論