在這篇的基礎(chǔ)之上,我們今天學(xué)習(xí)使用AC7802的串口收發(fā)。
1、把原來的工程復(fù)制一份到新的文件夾,并重命名為AC7802_UART工程。
2、新建Uart.h、Uart.c,內(nèi)容如下:
#ifndef UART_H
#define UART_H
#include "ac780x_uart.h"
void UART_Cfg_Init(void);
#endif
Uart.c
#include
#include "ac780x_gpio.h"
#include "ac780x_uart_reg.h"
#include "Uart.h"
#define RX_BUF_LEN 100U
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ù)組 */
/*!
- @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_txLen = g_rxLen;
g_rxLen = 0;
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);
}
3、修改makefile內(nèi)容中的TARGET 為:AC7802_UART。去掉原來gpio.c,新建Uart.c,增加ac78x_uart.c:
C sources
C_SOURCES =
Src/main.c
Src/AC7802x_irq_cb.c
Src/AC7802x_msp.c
Src/system_AC7802x.c
Drivers/ATC_Driver/Src/ac780x_gpio.c
Drivers/ATC_Driver/Src/ac780x_ckgen.c
Drivers/ATC_Driver/Src/ac780x_spm.c
Drivers/ATC_Driver/Src/ac780x_uart.c
User/Src/Uart.c
4、make結(jié)果如下:
lugl@lugl-virtual-machine:~/ac7802/AC7802_UART$ make
mkdir build
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/main.d" -Wa,-a,-ad,-alms=build/main.lst Src/main.c -o build/main.o
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/AC7802x_irq_cb.d" -Wa,-a,-ad,-alms=build/AC7802x_irq_cb.lst Src/AC7802x_irq_cb.c -o build/AC7802x_irq_cb.o
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/AC7802x_msp.d" -Wa,-a,-ad,-alms=build/AC7802x_msp.lst Src/AC7802x_msp.c -o build/AC7802x_msp.o
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/system_AC7802x.d" -Wa,-a,-ad,-alms=build/system_AC7802x.lst Src/system_AC7802x.c -o build/system_AC7802x.o
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/ac780x_gpio.d" -Wa,-a,-ad,-alms=build/ac780x_gpio.lst Drivers/ATC_Driver/Src/ac780x_gpio.c -o build/ac780x_gpio.o
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/ac780x_ckgen.d" -Wa,-a,-ad,-alms=build/ac780x_ckgen.lst Drivers/ATC_Driver/Src/ac780x_ckgen.c -o build/ac780x_ckgen.o
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/ac780x_spm.d" -Wa,-a,-ad,-alms=build/ac780x_spm.lst Drivers/ATC_Driver/Src/ac780x_spm.c -o build/ac780x_spm.o
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/ac780x_uart.d" -Wa,-a,-ad,-alms=build/ac780x_uart.lst Drivers/ATC_Driver/Src/ac780x_uart.c -o build/ac780x_uart.o
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 -x assembler-with-cpp -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/startup_AC7802x.d" startup_AC7802x.s -o build/startup_AC7802x.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/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
12016 12 2220 14248 37a8 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
5、輸入下載命令:
lugl@lugl-virtual-machine:~/ac7802/AC7802_UART$ pyocd flash ./build/AC7802_UART.elf --target ac78022mbqa
0000426 I Loading /home/lugl/ac7802/AC7802_UART/build/AC7802_UART.elf [load_cmd]
[==================================================] 100%
0001139 I Erased 0 bytes (0 sectors), programmed 0 bytes (0 pages), skipped 12288 bytes (24 pages) at 16.84 kB/s [loader]
6、同時(shí)為了方便下載,我們?cè)趍akefile后面增加 makefile flash命令實(shí)現(xiàn)下載:
flash:
pyocd flash ./build/AC7802_UART.elf --target ac78022mbqa
我們?cè)趫?zhí)行make falsh后就可以實(shí)現(xiàn)下載功能了:
lugl@lugl-virtual-machine:~/ac7802/AC7802_UART$ make flash
pyocd flash ./build/AC7802_UART.elf --target ac78022mbqa
0000445 I Loading /home/lugl/ac7802/AC7802_UART/build/AC7802_UART.elf [load_cmd]
[==================================================] 100%
0001146 I Erased 0 bytes (0 sectors), programmed 0 bytes (0 pages), skipped 12288 bytes (24 pages) at 17.16 kB/s [loader]
l
7、實(shí)現(xiàn)效果:下載后,我們用typec線接到開發(fā)板的typec接口,打開串口助手,我們就可以實(shí)現(xiàn)不定義發(fā)送,同時(shí)AC7802把接收到的數(shù)據(jù)回顯回來:
[20:21:10.657]發(fā)→◇AT1313123112123123
□
[20:21:10.661]收←◆AT1313123112123123
[20:47:13.157]發(fā)→◇AT13131231
□
[20:47:13.160]收←◆AT13131231
[20:47:22.561]發(fā)→◇你好
□
[20:47:22.563]收←◆你好
[20:47:30.890]發(fā)→◇你好 AC7802X
□
[20:47:30.893]收←◆你好 AC7802X
【總結(jié)】杰發(fā)的庫(kù)函數(shù)做得非常好,給的示例也非常好,使得學(xué)習(xí)起來非常快捷。同時(shí)在linux環(huán)境下,用vscode也開發(fā),也是非常之方便。體驗(yàn)了編程之快樂!
-
Linux
+關(guān)注
關(guān)注
87文章
11335瀏覽量
210088 -
uart
+關(guān)注
關(guān)注
22文章
1243瀏覽量
101604 -
DAC7802
+關(guān)注
關(guān)注
0文章
3瀏覽量
6503
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論