0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ubuntu下編程——杰發(fā)科技AC7802x串口控制LED燈

華仔的編程隨筆 ? 2023-06-04 16:46 ? 次閱讀

ubuntu20.04+vscode下對(duì)杰發(fā)科技的AC7802x Cortex-M0+進(jìn)行編程、編譯、下載等。

開(kāi)發(fā)板

開(kāi)發(fā)板為杰發(fā)科技的AC780x,板載的主控芯片為AC78022,32PIN。內(nèi)核為Cortex-M0+。

image.png

流程圖

image.png

控制部分的原理圖

1、本次實(shí)驗(yàn)選用LED1來(lái)實(shí)現(xiàn)燈的開(kāi)與關(guān)。原理圖如下:

image.png

image.png

從原理圖上看,LED1控制IO接到PA2,高電平制三極管導(dǎo)通,LED1亮,反之則關(guān)斷。

串口選擇

從開(kāi)發(fā)板原理圖上,uart1接到了ch340,并配備了typc接口,本次實(shí)驗(yàn)選用uart1為實(shí)驗(yàn)串口。

image.png

實(shí)驗(yàn)步聚

  1. 拷貝一份模版到AC7802_UART。并用vscode打開(kāi)。

    image.png

  2. 在User/Src下新建Uart.c,gpio.c,在Inc目錄下新建Uart.h、gpio.h,并把Uart.c、gpio.c加入到makefile的source中

    image.png

  3. 編寫(xiě)gpio.h 以及 gpio.c的Led初始化代碼:

#ifndef _GPIO_H__
#define _GPIO_H__

#include "ac780x_gpio.h"

#define LED1_PORT           (GPIOA)
#define LED1_PIN            (GPIO_PIN2)


/*LED1動(dòng)作定義.*/
#define LED1_ON             do{GPIO_SetPinLevel(LED1_PORT, LED1_PIN, GPIO_LEVEL_HIGH);}while(0)
#define LED1_OFF            do{GPIO_SetPinLevel(LED1_PORT, LED1_PIN, GPIO_LEVEL_LOW);}while(0)
#define LED1_TOGGLE         do{if(GPIO_GetPinLevel(LED1_PORT, LED1_PIN)){LED1_OFF;}else{LED1_ON;}}while(0)


void GPIO_LedInit(void);


#endif

gpio.c

#include "gpio.h"
#include "stdbool.h"

void GPIO_LedInit(void)
{
    /*初始化引腳功能,如果引腳上電后默認(rèn)為GPIO,可省略掉初始化步驟.
      有部分引腳上電默認(rèn)為非GPIO,則必須選擇其功能為GPIO才能作為GPIO使用.*/
    GPIO_SetFunc(LED1_PORT, LED1_PIN, GPIO_FUN0);/*! 功能復(fù)用選擇.*/


    /*! 設(shè)置LED引腳為GPIO輸出.*/
    GPIO_SetDir(LED1_PORT, LED1_PIN, GPIO_OUT);


    LED1_ON;

}
  1. 編寫(xiě)uart.h、usrt.c內(nèi)容如下:
#ifndef __UART_H__
#define __UART_H__
#include "ac780x_uart.h"

void UART_Cfg_Init(void);

#endif

uart.c

/* ===========================================  Includes  =========================================== */
#include < stdbool.h >
#include "ac780x_gpio.h"
#include "ac780x_uart_reg.h"
#include "Uart.h"


/* ============================================  Define  ============================================ */
#define RX_BUF_LEN   100U

/* ===========================================  Typedef  ============================================ */


/* ==========================================  Variables  =========================================== */
uint8_t g_rxLen  = 0;                 /*!< 串口接收長(zhǎng)度變量 */        
uint8_t g_txLen  = 0;                 /*!< 串口發(fā)送長(zhǎng)度變量 */
uint8_t g_txCnt  = 0;
uint8_t g_rxBuf[RX_BUF_LEN] = {0};    /*!< 串口接收數(shù)組 */     
uint8_t g_rec_state = 0;
/* ====================================  Functions declaration  ===================================== */


/* ======================================  Functions define  ======================================== */

/*!
 * @brief   串口回調(diào)函數(shù)
 *
 * @param   void *device:UART_Type pointer
            uint32_t wpara:UART lsr0 register
            uint32_t lpara:UART lsr1 register
 * @return  none
 */
void UART_Callback(void *device, uint32_t wpara, uint32_t lpara)
{
    UART_Type *Uart_Device = (UART_Type *)device;

    /*! 串口接收中斷 */
    if(wpara & UART_LSR0_DR_Msk)
    {
        g_rxBuf[g_rxLen++] = UART_ReceiveData(Uart_Device);

        if(g_rxLen > RX_BUF_LEN)
        {
            g_rxLen = 0;
        }
    }

    /*!< 發(fā)送fifo空中斷  */
    if(Uart_Device- >IER & UART_IER_ETXE_Msk)
    {
        UART_SendData(Uart_Device,g_rxBuf[g_txCnt++]);

        if(g_txCnt >= g_txLen)
        {
            g_txCnt = 0;
            UART_SetTXEInterrupt(Uart_Device, DISABLE);
        }
    }

    /*!< 串口空閑中斷 */
    if(lpara & UART_LSR1_IDLE_Msk)
    {
        g_rec_state = 1;

        //UART_SetTXEInterrupt(Uart_Device, ENABLE);
    }
}

/*!
 * @brief   uart configuration init
 *
 * @param   none
 * @return  none
 */
void UART_Cfg_Init(void)
{
    UART_ConfigType uart_config;

    GPIO_SetFunc(GPIOA, GPIO_PIN4, GPIO_FUN3);    /*! uart tx */
    GPIO_SetFunc(GPIOA, GPIO_PIN5, GPIO_FUN3);    /*! uart rx */

    uart_config.baudrate   = 115200;              /*! 波特率115200 */
    uart_config.dataBits   = UART_WORD_LEN_8BIT;  /*! 數(shù)據(jù)8bit */
    uart_config.stopBits   = UART_STOP_1BIT;      /*! 停止位1bit */
    uart_config.fifoByteEn = DISABLE;   
    uart_config.sampleCnt  = UART_SMP_CNT0;       /*! 16倍采樣 */
    uart_config.callBack   = UART_Callback;       /*! 回調(diào)函數(shù)設(shè)置 */

    UART_Init(UART1,&uart_config);                /*! 串口初始化 */

    UART_SetRXNEInterrupt(UART1, ENABLE);         /*! 串口接收中斷使能 */

    UART_SetIdleFuncEn(UART1, ENABLE);
    UART_SetIdleInterrupt(UART1, ENABLE);         /*! 使能串口空閑中斷 */

    NVIC_SetPriority(UART1_IRQn, 3);              /*! 串口中斷優(yōu)先級(jí) */
    NVIC_ClearPendingIRQ(UART1_IRQn);
    NVIC_EnableIRQ(UART1_IRQn);
}

編程的要點(diǎn)主要是串口中斷中的空閑中斷,如果觸發(fā)了空閑中斷,我們就認(rèn)為接收一次命令完畢,更新接收標(biāo)志為1.為主程序來(lái)判斷提供標(biāo)志位。

  1. 編寫(xiě)主程序如下:
/* --------------------------------- Includes -------------------------------*/
#include "main.h"
#include "ac780x_uart_reg.h"
#include "Uart.h"
#include "gpio.h"

/* --------------------------------- Function Prototypes --------------------*/
void SystemClock_Config(void);

extern uint8_t g_rxLen;                 /*!< 串口接收長(zhǎng)度變量 */        

extern uint8_t g_rxBuf[RX_BUF_LEN];    /*!< 串口接收數(shù)組 */     
extern uint8_t g_rec_state;

/**
  * @brief  The application entry point.
  *
  * @retval int
  */
int main(void)
{

    SystemClock_Config();
    InitDelay();
    GPIO_LedInit();

    UART_Cfg_Init();
    while(1)
    {
      if(g_rec_state == 1)
      {
        g_rec_state = 0;
        if(g_rxLen >=4)
        {
          if(g_rxBuf[0] == 'L' && g_rxBuf[1] == 'E' && g_rxBuf[2] == 'D' && g_rxBuf[3] == 'O' && g_rxBuf[4] == 'N')
          {
            LED1_ON;
          }
          else if(g_rxBuf[0] == 'L' && g_rxBuf[1] == 'E' && g_rxBuf[2] == 'D' && g_rxBuf[3] == 'O' && g_rxBuf[4] == 'F'  && g_rxBuf[5] == 'F')
          {
            LED1_OFF;
          }
          g_rxLen = 0;
        }
      }
      

    }

}


/**
    * @brief System Clock Configuration
    * @retval None
    */
void SystemClock_Config(void)
{
    CKGEN_SetSysclkSrc(SYSCLK_SRC_INTERNAL_OSC);
    CKGEN_SetSysclkDiv(SYSCLK_DIVIDER_1);
    CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);
}



/**
  * @brief  This function is executed in case of error occurrence.
  * @param  file: The file name as string.
  * @param  line: The line in file as a number.
  * @retval None
  */
void Error_Handler(char *file, int line)
{
    /* USER CODE BEGIN Error_Handler_Debug */
    /* User can add his own implementation to handle the driver error */
    while(1)
    {
    }
    /* USER CODE END Error_Handler_Debug */
}

/************************ (C) COPYRIGHT AutoChips *****END OF FILE****/
  1. 編譯,然后執(zhí)行make flash:
lugl@lugl-virtual-machine:~/ac7802/AC7802_UART$ make
arm-none-eabi-gcc -c -mcpu=cortex-m0plus -mthumb    -IInc -IDrivers/ATC_Driver/Inc -IDrivers/Device/Include -IDrivers/Device -IDrivers/Device/Include/CMSIS -IUser/Inc -O0 -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"build/Uart.d" -Wa,-a,-ad,-alms=build/Uart.lst User/Src/Uart.c -o build/Uart.o
arm-none-eabi-gcc build/main.o build/AC7802x_irq_cb.o build/AC7802x_msp.o build/system_AC7802x.o build/ac780x_gpio.o build/ac780x_ckgen.o build/ac780x_spm.o build/ac780x_uart.o build/Uart.o build/gpio.o build/startup_AC7802x.o -mcpu=cortex-m0plus -mthumb   -specs=nano.specs -TAC78022MBQA_FLASH.ld  -lc -lm -lnosys  -Wl,-Map=build/AC7802_UART.map,--cref -Wl,--gc-sections -o build/AC7802_UART.elf
arm-none-eabi-size build/AC7802_UART.elf
   text    data     bss     dec     hex filename
  12384      12    2228   14624    3920 build/AC7802_UART.elf
arm-none-eabi-objcopy -O ihex build/AC7802_UART.elf build/AC7802_UART.hex
arm-none-eabi-objcopy -O binary -S build/AC7802_UART.elf build/AC7802_UART.bin
lugl@lugl-virtual-machine:~/ac7802/AC7802_UART$ make flash
pyocd flash ./build/AC7802_UART.elf --target ac78022mbqa
0000415 I Loading /home/lugl/ac7802/AC7802_UART/build/AC7802_UART.elf [load_cmd]
[==================================================] 100%
0001737 I Erased 4096 bytes (8 sectors), programmed 4096 bytes (8 pages), skipped 8704 bytes (17 pages) at 9.46 kB/s [loader]

實(shí)現(xiàn)效果

我們打開(kāi)串口助手,發(fā)送LEDON、LEDOFF就可以控制LED燈的亮與滅了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    22984

    瀏覽量

    654456
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3541

    瀏覽量

    93462
  • Ubuntu
    +關(guān)注

    關(guān)注

    5

    文章

    554

    瀏覽量

    29429
  • 串口控制
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    9842
  • 杰發(fā)科技
    +關(guān)注

    關(guān)注

    0

    文章

    72

    瀏覽量

    5923
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Ubuntu VSCODE+GCC】CW32L031實(shí)現(xiàn)UART控制LED

    ubuntu系統(tǒng)下面使用vscode 使用串口驅(qū)動(dòng)實(shí)現(xiàn)對(duì)板載LED控制。
    的頭像 發(fā)表于 06-28 17:10 ?767次閱讀
    【<b class='flag-5'>Ubuntu</b> VSCODE+GCC】CW32L031實(shí)現(xiàn)UART<b class='flag-5'>控制</b><b class='flag-5'>LED</b>

    串口控制LED電路圖

    串口控制LED電路圖
    發(fā)表于 11-13 09:04 ?5433次閱讀

    四維圖新旗下發(fā)科技首款功能安全MCU–AC7840x提前回片

    近日,四維圖新旗下發(fā)科技首款功能安全MCU–AC7840x提前回片,并成功啟動(dòng)點(diǎn)亮。AC7840x的到來(lái),將全面提升汽車(chē)電子零部件的安全性,拓展國(guó)產(chǎn)MCU在汽車(chē)電子領(lǐng)域的應(yīng)用,是
    的頭像 發(fā)表于 03-18 08:59 ?1566次閱讀

    使用串口控制LED亮滅

    我們知道串口通信可以讓單片機(jī)和電腦進(jìn)行數(shù)據(jù)交換。那么是否可以用串口來(lái)控制LED亮滅呢?當(dāng)然是可以的。首先需要保證
    的頭像 發(fā)表于 10-11 11:45 ?1.3w次閱讀

    四維圖新智芯車(chē)規(guī)級(jí)MCU芯片AC7802x一次性成功點(diǎn)亮 實(shí)現(xiàn)“中國(guó)芯”又一突破

    近日,四維圖新智芯車(chē)規(guī)級(jí)MCU芯片AC7802x提前回片,并一次性成功點(diǎn)亮。AC7802x的到來(lái),將進(jìn)一步豐富四維圖新與旗下發(fā)科技在MCU芯片的布局,拓展國(guó)產(chǎn)MCU在汽車(chē)電子領(lǐng)域的應(yīng)
    發(fā)表于 11-24 10:36 ?715次閱讀

    ac7840x 發(fā)

    ac7840x 發(fā) 8月3日,四維圖新官微發(fā)布消息稱(chēng),近日,子公司發(fā)科技AutoChips
    發(fā)表于 03-30 10:28 ?475次閱讀

    發(fā)科技AC7802x測(cè)評(píng)】開(kāi)箱

    介紹發(fā)科技AC7802x高可靠低功耗車(chē)規(guī)級(jí)MCU
    的頭像 發(fā)表于 05-26 14:35 ?42.5w次閱讀
    【<b class='flag-5'>杰</b><b class='flag-5'>發(fā)</b>科技<b class='flag-5'>AC7802x</b>測(cè)評(píng)】開(kāi)箱

    PEmicro開(kāi)發(fā)與燒錄工具全面支持四維圖新旗下發(fā)科技全系列MCU

    近日,四維圖新旗下發(fā)科技和PEmicro共同宣布,PEmicro開(kāi)發(fā)與燒錄工具已全面支持發(fā)科技全系列MCU芯片,包括AC781x,
    的頭像 發(fā)表于 05-31 10:41 ?943次閱讀

    體驗(yàn)linux發(fā)7802x開(kāi)發(fā)串口不定長(zhǎng)收發(fā)實(shí)驗(yàn)

    把原來(lái)的工程復(fù)制一份到新的文件夾,并重命名為AC7802_UART工程。
    的頭像 發(fā)表于 06-04 15:37 ?21.8w次閱讀

    四維圖新旗下發(fā)科技首顆國(guó)產(chǎn)化車(chē)規(guī)級(jí)MCU芯片AC7802x正式量產(chǎn)

    網(wǎng)聯(lián)汽車(chē)時(shí)代為一級(jí)供應(yīng)商和OEM廠(chǎng)商提供了高性?xún)r(jià)比的汽車(chē)電子解決方案。 AC7802x量產(chǎn)豐富了發(fā)科技MCU產(chǎn)品序列,使客戶(hù)擁有更加多元化的產(chǎn)品選擇,這款國(guó)產(chǎn)化供應(yīng)鏈芯片,是公司實(shí)現(xiàn)“中國(guó)芯”的又一突破,同時(shí)也是在車(chē)規(guī)級(jí)微
    的頭像 發(fā)表于 08-03 18:35 ?655次閱讀
    四維圖新旗下<b class='flag-5'>杰</b><b class='flag-5'>發(fā)</b>科技首顆國(guó)產(chǎn)化車(chē)規(guī)級(jí)MCU芯片<b class='flag-5'>AC7802x</b>正式量產(chǎn)

    四維圖新旗下發(fā)科技國(guó)產(chǎn)化供應(yīng)鏈車(chē)規(guī)級(jí)MCU芯片AC7802x正式量產(chǎn)

    高性?xún)r(jià)比的汽車(chē)電子解決方案。 AC7802x量產(chǎn)豐富了發(fā)科技MCU產(chǎn)品序列,使客戶(hù)擁有更加多元化的產(chǎn)品選擇,這款國(guó)產(chǎn)化供應(yīng)鏈芯片,是公司實(shí)現(xiàn)“中國(guó)芯”的又一突破,同時(shí)也是在車(chē)規(guī)級(jí)微控制
    發(fā)表于 08-03 19:04 ?477次閱讀
    四維圖新旗下<b class='flag-5'>杰</b><b class='flag-5'>發(fā)</b>科技國(guó)產(chǎn)化供應(yīng)鏈車(chē)規(guī)級(jí)MCU芯片<b class='flag-5'>AC7802x</b>正式量產(chǎn)

    車(chē)規(guī)級(jí)MCU芯片AC7802x正式量產(chǎn)

    AC7802x量產(chǎn)豐富了發(fā)科技MCU產(chǎn)品序列,使客戶(hù)擁有更加多元化的產(chǎn)品選擇,這款國(guó)產(chǎn)化供應(yīng)鏈芯片,是公司實(shí)現(xiàn)“中國(guó)芯”的又一突破,同時(shí)也是在車(chē)規(guī)級(jí)微控制器領(lǐng)域的持續(xù)創(chuàng)新和技術(shù)進(jìn)步。
    發(fā)表于 08-10 09:31 ?305次閱讀
    車(chē)規(guī)級(jí)MCU芯片<b class='flag-5'>AC7802x</b>正式量產(chǎn)

    四維圖新旗下發(fā)科技與上海智驅(qū)達(dá)成戰(zhàn)略合作

    發(fā)科技的國(guó)產(chǎn)化供應(yīng)鏈汽車(chē)規(guī)格級(jí)正式批量生產(chǎn)了ac7802x mcu芯片,芯片已經(jīng)引導(dǎo)各效仿為客戶(hù)進(jìn)行了大規(guī)模應(yīng)用,產(chǎn)品和服務(wù)質(zhì)量得到了市場(chǎng)的認(rèn)可,智能網(wǎng)絡(luò)汽車(chē)時(shí)代的第一次向供應(yīng)商和oem企業(yè)具備高性?xún)r(jià)比的的汽車(chē)電子提供了解決方
    的頭像 發(fā)表于 08-21 10:29 ?487次閱讀

    AC7840x三電機(jī)控制應(yīng)用解決方案

    發(fā)微課堂》今天開(kāi)講第五課啦!發(fā)科技首款功能安全MCU芯片AC7840x已經(jīng)順利量產(chǎn)半年,考慮到客戶(hù)端對(duì)多電機(jī)應(yīng)用的強(qiáng)烈需求,
    的頭像 發(fā)表于 10-25 09:31 ?789次閱讀
    <b class='flag-5'>AC7840x</b>三電機(jī)<b class='flag-5'>控制</b>應(yīng)用解決方案

    四維圖新智芯車(chē)規(guī)級(jí)MCU芯片AC7802x一次性成功點(diǎn)亮 實(shí)現(xiàn)&quot;中國(guó)芯&quot;又一突破

    近日,四維圖新智芯車(chē)規(guī)級(jí)MCU芯片AC7802x提前回片,并一次性成功點(diǎn)亮。AC7802x的到來(lái),將進(jìn)一步豐富四維圖新與旗下發(fā)科技在MCU芯片的布局,拓展國(guó)產(chǎn)MCU在汽車(chē)電子領(lǐng)域的應(yīng)
    的頭像 發(fā)表于 04-08 03:01 ?375次閱讀
    四維圖新智芯車(chē)規(guī)級(jí)MCU芯片<b class='flag-5'>AC7802x</b>一次性成功點(diǎn)亮 實(shí)現(xiàn)&quot;中國(guó)芯&quot;又一突破