久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
發現網上都找不到ADIS16203的源程序,在這里存下
[打印本頁]
作者:
sundeer
時間:
2021-1-16 13:42
標題:
發現網上都找不到ADIS16203的源程序,在這里存下
單片機源程序如下:
#include "adis16203.h"
#include "halmain.h"
#include "stm32f4xx_hal_spi.h"
#include "stm32f4xx_hal_gpio.h"
extern SPI_HandleTypeDef hspi2;
ADIS16203_DATA_Typedef ADIS16203_DATA; //定義ADIS16203數據結構體
//bool write;
//SPI2口初始化
//這個spi初始化可以丟其他地方
//hspi2在halmian.h有聲明
void SPI2_Init(void)
{
hspi2.Instance = SPI2; //SPI2
hspi2.Init.Mode = SPI_MODE_MASTER; //設置SPI工作模式,設置為主模式
hspi2.Init.Direction = SPI_DIRECTION_2LINES; //設置SPI單向或者雙向的數據模式:SPI設置為雙線模式
hspi2.Init.DataSize = SPI_DATASIZE_16BIT; //設置SPI的數據大小:SPI發送接收16位幀結構
hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH; //串行同步時鐘的空閑狀態為高電平
hspi2.Init.CLKPhase = SPI_PHASE_2EDGE; //串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣
hspi2.Init.NSS = SPI_NSS_SOFT; //NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內部NSS信號有SSI位控制
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; //定義波特率預分頻的值:波特率預分頻值為64
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; //指定數據傳輸從MSB位還是LSB位開始:數據傳輸從MSB位開始
hspi2.Init.TIMode = SPI_TIMODE_DISABLE; //關閉TI模式
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; //關閉硬件CRC校驗
hspi2.Init.CRCPolynomial = 7; //CRC值計算的多項式
// HAL_SPI_Init(&hspi2); //初始化
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
Error_Handler();
}
__HAL_SPI_ENABLE(&hspi2); //使能SPI2
}
/*SPI2底層驅動,時鐘使能,引腳配置
void MY_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB時鐘
__HAL_RCC_GPIOC_CLK_ENABLE(); //使能GPIOB時鐘
__HAL_RCC_SPI2_CLK_ENABLE(); //使能SPI2時鐘
//PC3,PC2,PB10
GPIO_Initure.Pin = GPIO_PIN_2 | GPIO_PIN_3;
GPIO_Initure.Mode = GPIO_MODE_AF_PP; //復用推挽輸出
GPIO_Initure.Pull = GPIO_PULLUP; //上拉
GPIO_Initure.Speed = GPIO_SPEED_FAST; //快速
GPIO_Initure.Alternate = GPIO_AF5_SPI2; //復用為SPI2
HAL_GPIO_Init(GPIOC, &GPIO_Initure);
GPIO_Initure.Pin = GPIO_PIN_10;
HAL_GPIO_Init(GPIOB, &GPIO_Initure);
}
*/
//SPI速度設置函數
//SPI速度=fAPB1/分頻系數
//@ref SPI_BaudRate_Prescaler:SPI_BAUDRATEPRESCALER_2~SPI_BAUDRATEPRESCALER_2 256
//fAPB1時鐘一般為42Mhz:
void SPI2_SetSpeed(uint8_t SPI_BaudRatePrescaler)
{
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler)); //判斷有效性
__HAL_SPI_DISABLE(&hspi2); //關閉SPI
hspi2.Instance->CR1 &= 0XFFC7; //位3-5清零,用來設置波特率
hspi2.Instance->CR1 |= SPI_BaudRatePrescaler; //設置SPI速度
__HAL_SPI_ENABLE(&hspi2); //使能SPI
}
void ADIS16203_IO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA時鐘
__HAL_RCC_GPIOC_CLK_ENABLE(); //使能GPIOA時鐘,復位引腳
GPIO_InitStructure.Pin = SPI2_NSS_PIN; //定義spi2_cs片選引腳
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull = GPIO_PULLUP;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SPI2_NSS_IOPORT, &GPIO_InitStructure);
//初始為高電平,模塊為低電平有效,所以置高則不會被選取
HAL_GPIO_WritePin(SPI2_NSS_IOPORT, SPI2_NSS_PIN, GPIO_PIN_SET);
GPIO_InitStructure.Pin = ADIS16203_RST_PIN; //定義模塊復位引腳
HAL_GPIO_Init(ADIS16203_RST_IOPORT, &GPIO_InitStructure);
//模塊為低電平復位,先置高
HAL_GPIO_WritePin(ADIS16203_RST_IOPORT, ADIS16203_RST_PIN, GPIO_PIN_SET);
//官方庫自己已經定義好了,在f4xx_hal_msp.c中關于msio,mosi,sck的引腳配置。關于中斷修改優先級即可
HAL_SPI_MspInit(hspi2);
}
//模塊初始化
void ADIS16203_Init(void)
{
SPI2_Init(); //SPI2初始化
ADIS16203_IO_Init() ; //IO初始化
}
//模塊復位函數
void ADIS16203Reset(void)
{
HAL_GPIO_WritePin(ADIS16203_RST_IOPORT, ADIS16203_RST_PIN, GPIO_PIN_RESET);
DelayMs(1);
HAL_GPIO_WritePin(ADIS16203_RST_IOPORT, ADIS16203_RST_PIN, GPIO_PIN_SET);
DelayMs(6);
}
//TxData:要寫入字節
//返回值:讀出的字節
//一次傳輸量為16bit,所以只傳輸一次
uint16_t SPI2_ReadWriteByte(uint8_t COM, bool write)
{
uint16_t TxData, Rxdata;
{
if (write == true)
TxData = (COM << 8) + (1 << 15);
else
TxData = (COM << 8) + 0;
}
HAL_SPI_TransmitReceive(&hspi2, (uint8_t *)(&TxData), (uint8_t *)(&Rxdata), 1, 1000);
return Rxdata;
}
void ADIS16203_CS_LOW(void) //片選信號拉低,片選有效
{
HAL_GPIO_WritePin(SPI2_NSS_IOPORT, SPI2_NSS_PIN, GPIO_PIN_RESET);
}
void ADIS16203_CS_HIGH(void) //片選信號拉高,片選無效
{
HAL_GPIO_WritePin(SPI2_NSS_IOPORT, SPI2_NSS_PIN, GPIO_PIN_SET);
}
//取讀模塊數據(無返回值類型)
void READ_ADIS16203_DATA(uint8_t COM, ADIS16203_DATA_Typedef *ADIS_DATA, bool wr)
{
ADIS16203_CS_LOW();
SPI2_ReadWriteByte(COM, wr);
ADIS16203_CS_HIGH();
delay_us(10);
ADIS16203_CS_LOW();
switch (COM)
{
case SUPPLY_OUT:
ADIS_DATA->SUPPLY_OUT_DATA = ((SPI2_ReadWriteByte(COM, wr) & 0xfff) * 1.22);
break;
case AUX_ADC:
ADIS_DATA->AUX_ADC_DATA = ((SPI2_ReadWriteByte(COM, wr) & 0xfff) * 0.61);
break;
case TEMP_OUT:
ADIS_DATA->TEMP_OUT_DATA = ((SPI2_ReadWriteByte(COM, wr) & 0xfff) * -0.47); //這個要注意下
break;
case INCL_OUT:
ADIS_DATA->INCL_OUT_DATA = ((SPI2_ReadWriteByte(COM, wr) & 0x3fff) * 0.025);
break;
case INCL_180_OUT:
ADIS_DATA->INCL_180_OUT_DATA = ((SPI2_ReadWriteByte(COM, wr) & 0x3fff) * 0.025);
break;
default:
break;
}
ADIS16203_CS_HIGH();
}
//取讀模塊數據(有返回值類型),還得進一步處理
uint16_t READ_ADIS16203_DATA2(uint8_t COM, bool wr)
{
uint16_t ret;
ADIS16203_CS_LOW();
SPI2_ReadWriteByte(COM, wr);
ADIS16203_CS_HIGH();
delay_us(10);
ADIS16203_CS_LOW();
ret = SPI2_ReadWriteByte(COM, wr);
ADIS16203_CS_HIGH();
return ret;
}
uint16_t
復制代碼
51hei.png
(4.75 KB, 下載次數: 46)
下載附件
2021-1-16 16:04 上傳
全部資料51hei下載地址:
ADIS16203.zip
(3.55 KB, 下載次數: 22)
2021-1-16 13:42 上傳
點擊文件名下載附件
可能有問題
下載積分: 黑幣 -5
作者:
mick32
時間:
2022-4-5 04:40
Excellent component
14-bit digital inclination outputs
Thank you
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产一区二区在线视频
|
国产日韩免费观看
|
999精品视频
|
国产综合精品
|
国产999精品久久久久久
|
男女下面一进一出网站
|
亚洲一区二区免费视频
|
天天操网
|
欧美专区在线
|
精品一区二区不卡
|
一区二区日本
|
97国产爽爽爽久久久
|
国产91av视频
|
99久久精品免费看国产四区
|
欧美片网站免费
|
国产日韩免费视频
|
日韩中文字幕在线观看
|
九九精品热
|
av天天看
|
色吧久久
|
伊人精品久久久久77777
|
99热电影
|
国产日韩欧美一区二区
|
国内av在线
|
在线黄色影院
|
亚洲高清一区二区三区
|
亚洲经典一区
|
亚洲一区二区三区四区五区午夜
|
狠狠躁天天躁夜夜躁婷婷老牛影视
|
成人免费看黄网站在线观看
|
一级免费视频
|
亚洲精品99
|
成人精品视频免费
|
亚洲精品一区二区另类图片
|
国产高清美女一级a毛片久久w
|
亚洲精品欧洲
|
在线观看精品视频网站
|
欧美一区二
|
国产精品一区二区av
|
一区二区三区四区在线
|
欧美一级二级视频
|