测试MM32F3277基本模块功能

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试MM32F3277基本模块功能相关的知识,希望对你有一定的参考价值。

模块功能测试
文章目录
测试UART
测试ADC
测试DAC
测试PWM
实验总结

简 介: 对于MM32F3277的内部基本模块进行测试测试。修改并生成了基本的未来应用的模块。

关键词 MM32F3277

 

§01 块功能测试


   从SeekFree的Gitee开源库建立通用MM32开发模板 建立了基于MM32F3277的基本开发模板。本文将对于MM32F3277的内部模块进行测试和修改,并将所使用的模块功能对于原来模板中的源文件进行逐一修改。

一、测试UART

1、测试软件

  利用printf将信息通过UART1发送。UART1在board_init(true)进行了初始化。

UART1初始化参数:
● 波特率:115200
● 数据位:8bit
#define MAIN_GLOBALS        1              // Define the global variables
#include "MAIN.H"

#include "headfile.h"

#define LED1                B2

int main(void) 
    unsigned int nCount, nSendCount;
    
    board_init(true);                       // Initialize UART1

    OUT(LED1);
    
    nCount = 1;
    
    while(1) 
        if(++nCount & 0x10) ON(LED1);
        else OFF(LED1);
        
        if(++nSendCount >= 200) 
            nSendCount = 0;
            printf("U");                    // Send 'U' from UART1
        
        
        systick_delay_ms(1);
                                           // 

2、测试TX输出

(1)测试波形

  测量UART1的TX的输出波形。

▲ 图1.1.1 测量UART1的TX的输出波形

▲ 图1.1.2 UART1 TX的输出波形

(2)测试串口数据

  使用STM32BOOTLOADER接收到的数据。

▲ 图1.1.3 使用STM32BOOTLOADER接收到的数据

3、测试接受与发送

(1)测试代码

#define MAIN_GLOBALS        1              // Define the global variables
#include "MAIN.H"

#include "headfile.h"

#define LED1                B2

int main(void) 
    unsigned int nCount;
    uint8 c;
    
    board_init(true);                       // Initialize UART1
    printf("MM32F3277 Main Program      -- by Dr.ZhuoQing,%s,%s[%ld]\\r\\n", 
                                        __DATE__, __TIME__, SystemCoreClock);
    
    OUT(LED1);
    
    nCount = 1;
    
    while(1) 
        if(++nCount & 0x10) ON(LED1);
        else OFF(LED1);
        
        if(uart_query(UART_1, &c)) 
            printf("Receive Char : %x\\r\\n", c);
        
                
        systick_delay_ms(1);
                                           // 

(2)测试STM32BOOTLOADER

  利用STM32 Bootloader测试发送与接收。

  在STM32-Bootloader输入 window

MM32F3277 Main Program      -- by Dr.ZhuoQing,Nov 15 2021,21:31:15[120000000]
Receive Char : 77
Receive Char : 69
Receive Char : 6e
Receive Char : 64
Receive Char : 6f
Receive Char : 77

4、测试UART2

(1)测试代码

#define MAIN_GLOBALS        1              // Define the global variables
#include "MAIN.H"

#include "headfile.h"

#define LED1                B2

int main(void) 
    unsigned int nCount;
    unsigned int nSendCount;
    uint8 c;        
    
    board_init(true);                       // Initialize UART1
    printf("MM32F3277 Main Program      -- by Dr.ZhuoQing,%s,%s[%ld]\\r\\n", 
                                        __DATE__, __TIME__, SystemCoreClock);
    
    OUT(LED1);
    
    uart_init(UART_2, 115200, UART2_TX_A02, UART2_RX_A03);
    
    nCount = 1;
    nSendCount = 0;
    
    while(1) 
        if(++nCount & 0x10) ON(LED1);
        else OFF(LED1);
        
        if(uart_query(UART_1, &c)) 
            printf("Receive Char : %x\\r\\n", c);
            uart_putchar(UART_2, c);
        
        
        if(++nSendCount > 10) 
            nSendCount = 0;
            c = 'U';
            uart_putchar(UART_2, c);
        
        
        systick_delay_ms(1);
                                           // 

(2)测试UART2 TX

  测试UART2的TX(A02)的波形。

▲ 图1.1.4 测试UART2_TX的信号波形

(3)测试中断接收

  • main.c 程序:
uart_init(UART_2, 115200, UART2_TX_A02, UART2_RX_A03);
uart_rx_irq(UART_2, ENABLE);
  • isr.c :
void UART2_IRQHandler(void)

    if(UART2->ISR & UART_ISR_TX_INTF)       // 串口发送缓冲空中断
    
        UART2->ICR |= UART_ICR_TXICLR;      // 清除中断标志位
    
    if(UART2->ISR & UART_ISR_RX_INTF)       // 串口接收缓冲中断
    
        UART2->ICR |= UART_ICR_RXICLR;      // 清除中断标志位

        extern bool uart2_interrupt_flag;
        extern uint8 uart2_get_buffer;
            
        uart2_interrupt_flag = true;                                                    // UART2 中断标志置位
        uart_getchar(UART_2, &uart2_get_buffer);                                        // 读取数据
    

5、增加交互命令

  在main程序中增加了对于UART1的命令行的交互处理程序部分。

/*
**==============================================================================
** MAIN.C:             -- by Dr. ZhuoQing, 2021-11-15
**
**==============================================================================
*/
//------------------------------------------------------------------------------
#include "headfile.h"
#include "mm32f3277.h"
//------------------------------------------------------------------------------
#define MAIN_GLOBALS        1              // Define the global variables
#include "MAIN.H"
#define LED1                B2
//------------------------------------------------------------------------------
int main(void) 
    unsigned int nCount;
    //--------------------------------------------------------------------------
    board_init(true);                       // Initialize UART1
    MM32F3277Init();
    printf("MM32F3277 Main Program      -- by Dr.ZhuoQing,%s,%s[%ld]\\r\\n", 
                                        __DATE__, __TIME__, SystemCoreClock);
    //--------------------------------------------------------------------------
#if CONSOLE_DEBUG
    ConsoleDebugInit();
    uart_rx_irq(UART_1, ENABLE);
#endif // CONSOLE_DEBUG
    //--------------------------------------------------------------------------
    OUT(LED1);    
    DACOutput1(0x200);
    DACOutput2(0x200);
    nCount = 1;
    while(1) 
        if(++nCount & 0x100) ON(LED1);
        else OFF(LED1);
        //----------------------------------------------------------------------
#if CONSOLE_DEBUG
        ConsoleCmdProc();
#endif // CONSOLE_DEBUG        
        //----------------------------------------------------------------------
        WaitMS(1);
    

//==============================================================================
//          CONSOLE DEBUG INTERFACE
//------------------------------------------------------------------------------
#if CONSOLE_DEBUG
void ConsoleCmdProc(void) 
    if(g_ucArgumentNumber == 0) return;
    //--------------------------------------------------------------------------
    if(strcmp(CDA(0), "hello") == 0) 
        printf("MM32F3277 is ready.\\r\\n");
     else IFCDA("dac") 
        int nNumber;
        sscanf(CDA(1), "%x", &nNumber);
        DACOutput1(nNumber);
        printf("DAC out : %x\\r\\n", nNumber); 
     else         
        printf("ERROR:%s!\\r\\n", CDA(0));
    
    //--------------------------------------------------------------------------
    g_ucArgumentNumber = 0;    

//------------------------------------------------------------------------------
void ConsoleDebugInit(void) 
    g_nInputBufferPoint = 0;
    g_ucArgumentNumber = 0;

void ConsoleDebug() 
    uint8 c;
    if(uart_query(UART_1, &c)) 
        if(c == '\\r' || c == '\\n' || c == 0) 
            ConsoleBuffer2Argument();
         else if(c == '\\b') 
            g_nInputBufferPoint --;
         else 
            if(g_nInputBufferPoint < DEBUG_BUFFER) 
                g_ucInputBuffer[g_nInputBufferPoint ++] = c;            
           
    

void ConsoleBuffer2Argument(void) 
    uint8 c;
    int i;
    int nArgumentPoint = 0;
    g_ucArgumentNumber = 0;
    if(g_nInputBufferPoint == 0) return;
    for(i = 0; i < g_nInputBufferPoint; i ++) 
        c = g_ucInputBuffer[i];
        if(c == ' ' || c == '\\r') 
            if(nArgumentPoint == 0)
                continue;
            else 
                g_ucArgument[g_ucArgumentNumber][nArgumentPoint] = 0;
                if(g_ucArgumentNumber >= ARGUMENT_NUM)
                    break;
                else 
                    g_ucArgumentNumber ++;
                    nArgumentPoint = 0;
                
            
         else 
            if(nArgumentPoint <以上是关于测试MM32F3277基本模块功能的主要内容,如果未能解决你的问题,请参考以下文章

MM32F3277 MicroPython 实验板设计和软件测试

测试MM32F3277中的MicroPython的Signal功能

设计带有SD卡的 MM32F3277 MicroPython 实验板

测试MM32F3277 MicroPython 的定时器功能

MindMotion MM32F3277 SoftI2C功能测试

测试MM32 MicroPython测试电路板的基本功能