#define SetPD_Sck() GPIO_SetBits(GPIOG, GPIO_Pin_5)
#define ResetPD_Sck() GPIO_ResetBits(GPIOG, GPIO_Pin_5)
#define ReadDout() GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_6)
#define PowDownADC() SetPD_Sck()
void init_Hx711()
{
/* Initialize ADC PD_SCK:PG5 DOUT:PG6 */
GPIO_Init(GPIOG, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(GPIOG, GPIO_Pin_6, GPIO_Mode_In_FL_No_IT);
SetPD_Sck();
}
uint32_t ReadAD(void)
{
int16_t Dat=0;
uint8_t i;
asm("sim"); // 关全局中断
if(ReadDout()==0)
{
for( i=0; i<16; i++)
{
SetPD_Sck();
ResetPD_Sck();
if(ReadDout())
Dat|=0x8000>>i;
}
for( i=0; i<9; i++)
{
SetPD_Sck();
ResetPD_Sck();
}
}
asm("rim"); // 开全局中断
return Dat;
}
void USART1_Config(void)
{
/* EVAL COM (USARTx) configuration -----------------------------------------*/
/* USART configured as follow:
- BaudRate = USART_BAUDRATE baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Receive and transmit enabled
- USART Clock disabled
*/
/* Enable USART clock */
/* Configure USART Tx as alternate function push-pull (software pull up)*/
GPIO_ExternalPullUpConfig(GPIOA, GPIO_Pin_2, ENABLE);
/* Configure USART Rx as alternate function push-pull (software pull up)*/
GPIO_ExternalPullUpConfig(GPIOA, GPIO_Pin_3, ENABLE);
SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortA,ENABLE);
/* USART configuration */
USART_Init(USART1, 115200,
USART_WordLength_8b,
USART_StopBits_1,
USART_Parity_No,
(USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx));
/* Enable general interrupts */
enableInterrupts();
/* Enable the USART Receive interrupt: this interrupt is generated when the USART
receive data register is not empty */
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* USART Disable */
USART_Cmd(USART1, ENABLE);
}
/**
* @brief Configure DMA peripheral
* @param None
* @retval None
*/
void UART_TX_DMA_Config(void)
{
/* Deinitialize DMA channels */
DMA_GlobalDeInit();
DMA_DeInit(DMA1_Channel1);
//DMA_DeInit(DMA1_Channel2);
/* DMA channel Rx of USART Configuration
DMA_Init(USART_DMA_CHANNEL_RX, (uint16_t)RxBuffer, (uint16_t)USART_DR_ADDRESS,
DATA_TO_RECEIVE, DMA_DIR_PeripheralToMemory, DMA_Mode_Normal,
DMA_MemoryIncMode_Inc, DMA_Priority_Low, DMA_MemoryDataSize_Byte);
*/
/* DMA channel Tx of USART Configuration */
DMA_Init(DMA1_Channel1, (uint16_t)USART_TxBuffer, (uint16_t)USART1->DR,
0, DMA_DIR_MemoryToPeripheral, DMA_Mode_Normal,
DMA_MemoryIncMode_Inc, DMA_Priority_High, DMA_MemoryDataSize_Byte);
/* Enable the USART Tx/Rx DMA requests */
USART_DMACmd(USART1, USART_DMAReq_TX, ENABLE);
/* Global DMA Enable */
DMA_GlobalCmd(ENABLE);
/* Enable the USART Tx DMA channel */
DMA_Cmd(DMA1_Channel1, DISABLE);
/* Enable the USART Rx DMA channel */
//DMA_Cmd(USART_DMA_CHANNEL_RX, ENABLE);
}
void UART1_Send(uint8_t buf[],uint8_t len)
{
if( DMA_GetCurrDataCounter(DMA1_Channel1)>0)
{
while (DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);
}
DMA_ClearFlag(DMA1_FLAG_TC1);
DMA_ClearFlag(DMA1_FLAG_HT1);
DMA_ClearITPendingBit(DMA1_IT_TC1);
DMA_ClearITPendingBit(DMA1_IT_HT1);
DMA_Cmd(DMA1_Channel1, DISABLE);
memcpy(USART_TxBuffer,buf,len);
DMA1_Channel1->CPARH = 0x52;
DMA1_Channel1->CPARL = 0x31;
USART_DMACmd(USART1, USART_DMAReq_TX, ENABLE);
DMA_SetCurrDataCounter(DMA1_Channel1,len);
DMA_Cmd(DMA1_Channel1, ENABLE);
}
/**
* @brief Configure System Clock
* @param None
* @retval None
*/
void CLK_Config(void)
{
/* Select HSI as system clock source */
CLK_SYSCLKSourceSwitchCmd(ENABLE);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
/* system clock prescaler: 1*/
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI)
{}
/* Enable USART1 CLK */
CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
/* Enable USART3 CLK */
}
uint8_t Txbuff[50];
void main()
{
CLK_Config();
init_Hx711();
USART1_Config();
UART_TX_DMA_Config();
while(1)
{
uint8_t len;
uint32_t val=ReadAD();
len=sprintf(Txbuff,"AD=%d \r\n",val);
UART1_Send(Txbuff,len);
}
}
|