欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2254|回復: 1
打印 上一主題 下一主題
收起左側

stm8l單片機與HX711通信

[復制鏈接]
跳轉到指定樓層
樓主
ID:648071 發表于 2019-11-23 21:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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);
}

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2019-11-23 23:02 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表