新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2021-8-9
- 在线时间
- 3 小时
|
H750串口定时输出读取,现在的问题是给一个3.3V电压输入,串口输出数值不对,有没有大佬可以指点一下
//数据引脚定义
FMC_D0->PD14
FMC_D1->PD15
FMC_D2->PD0
FMC_D3->PD1
FMC_D4->PE7
FMC_D5->PE8
FMC_D6->PE9
FMC_D7->PE10
FMC_D8->PE11
FMC_D9->PE12
FMC_D10->PE13
FMC_D11->PE14
FMC_D12->PE15
FMC_D13->PD8
FMC_D14->PD9
FMC_D15->PD10
//信号引脚
FMC_NOE->PD4
FMC_CS->PC7
//控制引脚
BUSY->PE6
CONVEST->PC6
OS0->PC8
OS1->PC9
OS2->PC10
RANGE->PC11
RESET->PC12
代码如下
#include "ad7606.h"
#include "stdio.h"
#include "bsp_SysTick.h"
#define OS0_0() GPIOC->BSRR = ((uint32_t)GPIO_PIN_8<<16U)
#define OS0_1() GPIOC->BSRR = GPIO_PIN_8
#define OS1_0() GPIOC->BSRR = ((uint32_t)GPIO_PIN_9<<16U)
#define OS1_1() GPIOC->BSRR = GPIO_PIN_9
#define OS2_0() GPIOC->BSRR = ((uint32_t)GPIO_PIN_10<<16U)
#define OS2_1() GPIOC->BSRR = GPIO_PIN_10
#define CONVST_1() GPIOC->BSRR = GPIO_PIN_6
#define CONVST_0() GPIOC->BSRR = ((uint32_t)GPIO_PIN_6<<16U)
/*éèÖÃêäèëá¿3ìμÄGPIO: PC11 */
#define RANGE_1() GPIOC->BSRR = GPIO_PIN_11
#define RANGE_0() GPIOC->BSRR = ((uint32_t)GPIO_PIN_11<<16U)
/*AD7606¸′λ¿úÏß : PC12*/
#define RESET_1() GPIOC->BSRR = GPIO_PIN_12
#define RESET_0() GPIOC->BSRR = ((uint32_t)GPIO_PIN_12<<16U)
/*AD7606 FSMC×üÏßμØÖ·£¬Ö»Äü¶á,ÎTDèD′ */
#define AD7606_RESULT() *(__IO uint16_t *)0x60000000
AD7606_VAR_T g_tAD7606; /* ¶¨òå1¸ö諾ֱäá¿£¬±£′æò»D©2Îêy */
AD7606_FIFO_T g_tAdcFifo; /* ¶¨òåFIFO½á11ìå±äá¿ */
static void AD7606_CtrlLinesConfig(void);
static void AD7606_FSMCConfig(void);
void bsp_InitAD7606(void)
{
AD7606_CtrlLinesConfig();
AD7606_FSMCConfig();
AD7606_SetOS(AD_OS_NO);
AD7606_SetInputRange(0);
AD7606_Reset();
CONVST_1();
}
/***********************************************
***********************************************/
static void AD7606_CtrlLinesConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_FMC_CLK_ENABLE();
GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStructure.Alternate = GPIO_AF12_FMC;
/* ÅäÖÃGPIOD */
GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |
GPIO_PIN_14 |GPIO_PIN_15;
HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
/* ÅäÖÃGPIODE*/
GPIO_InitStructure.Pin = GPIO_PIN_4 |GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |
GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 |GPIO_PIN_15;
HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);
{
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStructure.Pin=GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);
}
}
/********************************
* oˉ êy Ãû: AD7606_FSMCConfig
* 1|ÄüËμÃ÷: ÅäÖÃFSMC2¢¿ú·ÃÎêê±Dò
********************************/
static void AD7606_FSMCConfig(void)
{
SRAM_HandleTypeDef hsram = {0};
FMC_NORSRAM_TimingTypeDef SRAM_Timing = {0};
hsram.Instance = FMC_NORSRAM_DEVICE;
hsram.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
/* FMCê1óÃμÄHCLK3£¬Ö÷Æμ200MHz£¬1¸öFMCê±ÖóÖüÆú¾íêÇ5ns */
SRAM_Timing.AddressSetupTime = 5;
SRAM_Timing.AddressHoldTime = 2;
SRAM_Timing.DataSetupTime = 5;
SRAM_Timing.BusTurnAroundDuration = 1;
SRAM_Timing.CLKDivision = 2;
SRAM_Timing.DataLatency = 2;
SRAM_Timing.AccessMode = FMC_ACCESS_MODE_A;
hsram.Init.NSBank = FMC_NORSRAM_BANK1;
hsram.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
hsram.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
hsram.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
hsram.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
hsram.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
hsram.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
hsram.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
hsram.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
hsram.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
hsram.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
hsram.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
hsram.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
/* 3õê¼»ˉSRAM¿ØÖÆÆ÷ */
if(HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing)!=HAL_OK)
{
while(1){;}
}
}
/****************************************
**************************************/
void AD7606_SetOS(uint8_t _ucOS)
{
g_tAD7606.ucOS = _ucOS;
switch (_ucOS)
{
case AD_OS_X2:
OS2_0();
OS1_0();
OS0_1();
break;
case AD_OS_X4:
OS2_0();
OS1_1();
OS0_0();
break;
case AD_OS_X8:
OS2_0();
OS1_1();
OS0_1();
break;
case AD_OS_X16:
OS2_1();
OS1_0();
OS0_0();
break;
case AD_OS_X32:
OS2_1();
OS1_0();
OS0_1();
break;
case AD_OS_X64:
OS2_1();
OS1_1();
OS0_0();
break;
case AD_OS_NO:
default:
g_tAD7606.ucOS = AD_OS_NO;
OS2_0();
OS1_0();
OS0_0();
break;
}
}
/***************************************
* oˉ êy Ãû: AD7606_SetInputRange
* 1|ÄüËμÃ÷: ÅäÖÃAD7606Ä£ÄaDÅoÅêäèëá¿3ì¡£
***************************************/
void AD7606_SetInputRange(uint8_t _ucRange)
{
if(_ucRange == 0)
{
g_tAD7606.ucRange = 0;
RANGE_0();
}
else
{
g_tAD7606.ucRange = 1;
RANGE_1();
}
}
/**********************************
* oˉ êy Ãû: AD7606_Reset
* 1|ÄüËμÃ÷: ó2¼t¸′λAD7606£¬¸′λ֮oó»Ö¸′μ½Õy3£1¤×÷×′쬡£
***********************************/
void AD7606_Reset(void)
{
RESET_0(); /* íË3ö¸′λ×′ì¬ */
RESET_1(); /* ½øèë¸′λ×′ì¬ */
RESET_1();
RESET_1();
RESET_1();
RESET_0(); /* íË3ö¸′λ×′ì¬ */
}
/***********************************
* oˉ êy Ãû: AD7606_StartConvst
* 1|ÄüËμÃ÷: Æô¶ˉ1′ÎADC×a»»
************************************/
void AD7606_StartConvst(void)
{
/* CONVSTƽê±Îa¸ß */
CONVST_0();
CONVST_0();
CONVST_0();
delay_us(1);
CONVST_1();
}
/*********************************************
* oˉ êy Ãû: AD7606_ReadNowAdc
* 1|ÄüËμÃ÷: ¶áè¡8·2éÑù½á1û¡£½á1û′æ′¢Ôú諾ֱäá¿ g_tAD7606
**********************************************/
void AD7606_ReadNowAdc(void)
{
g_tAD7606.sNowAdc[0] = AD7606_RESULT();
g_tAD7606.sNowAdc[1] = AD7606_RESULT();
g_tAD7606.sNowAdc[2] = AD7606_RESULT();
g_tAD7606.sNowAdc[3] = AD7606_RESULT();
g_tAD7606.sNowAdc[4] = AD7606_RESULT();
g_tAD7606.sNowAdc[5] = AD7606_RESULT();
g_tAD7606.sNowAdc[6] = AD7606_RESULT();
g_tAD7606.sNowAdc[7] = AD7606_RESULT();
}
————————————————————————————————————————————————————
定时中断读取
void TIM3_IRQHandler(void)
{
if((TIM3->SR & TIM_FLAG_UPDATE) != RESET)
{
AD7606_StartConvst();
AD7606_ReadNowAdc();
ucRefresh=1;
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
TIM3->SR = ~ TIM_FLAG_UPDATE;
}
}
|
|