测试MM32F3277基本模块功能
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试MM32F3277基本模块功能相关的知识,希望对你有一定的参考价值。
简 介: 对于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 的定时器功能