y369369 发表于 2023-9-15 13:22:59

【N32G031开发板】开箱+ I/O测试





收到了本次比赛国民技术送的N32G031,今天来测一测他的性能,官方做的分布还是比我们自己做的要整洁一点,可能我们做功能把板子做的比较小吧。
硬件规格
N32G031板卡采用了N32G031单片机作为核心处理器,单片机基于ARM Cortex-M0+内核架构,拥有高性能和低功耗的特点。此外,该板卡还具备以下硬件规格:


闪存:板卡内置128KB闪存,可以存储代码和数据。
RAM:板卡配备6KB SRAM,用于临时存储数据。
I/O接口:板卡提供了多个GPIO、UART、I2C、SPI等常用接口,方便与其他设备进行通信和连接。
时钟源:板卡支持内部和外部时钟源,适用于不同的应用场景。
电源管理:板卡具备低功耗的电源管理模块,可实现有效的能源利用。
软件支持
N32G031板卡提供了丰富的软件支持,包括开发工具链和相关库函数。以下是板卡的软件支持方面的亮点:


开发工具:
N32G031板卡支持多种主流的开发工具,如Keil MDK、IAR Embedded Workbench等,为开发者提供了便捷的开发环境。
库函数:板卡的软件库函数涵盖了常见的外设驱动和功能模块,如GPIO控制、UART通信、定时器等,大大简化了开发过程。
示例代码:N32G031板卡附带了丰富的示例代码,展示了不同外设的使用方法,帮助开发者更快上手。


下边简单来测测I/O的一些功能
GPIO测试
通过使用板卡的GPIO接口,我们进行了以下测试:
1、简单输出:将一个GPIO引脚设置为输出模式,并将其电平设置为高电平或低电平。
#include "n32g031.h"

void main() {
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // 使能GPIOB时钟
    GPIOB->MODER &= ~GPIO_MODER_MODE0; // 将PB0设置为输出模式
    GPIOB->ODR |= GPIO_ODR_OD0; // 设置PB0电平为高
    while (1) {
      // 循环保持高电平状态
    }
}2、简单输入:将一个GPIO引脚设置为输入模式,并读取其电平状态。
#include "n32g031.h"

void main() {
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // 使能GPIOB时钟
    GPIOB->MODER &= ~GPIO_MODER_MODE0; // 将PB0设置为输入模式
    while (1) {
      if (GPIOB->IDR & GPIO_IDR_ID0) {
            // PB0为高电平
      } else {
            // PB0为低电平
      }
    }
}
3、UART测试
通过使用板卡的UART接口,我们进行了以下测试:
发送数据:使用UART发送数据到计算机串口终端。
#include "n32g031.h"

void UART_SendChar(uint8_t ch) {
    USART1->TDR = ch;
    while (!(USART1->ISR & USART_ISR_TXE));
}

void UART_SendString(const char* str)
4、I2C测试
通过使用板卡的I2C接口,我们进行了以下测试:


①主机发送:将板卡设置为I2C主机,并向从设备发送数据。
#include "n32g031.h"

void I2C_Master_Send(uint8_t addr, uint8_t data) {
    I2C1->CR2 = (addr << 1) | I2C_CR2_AUTOEND; // 设定地址和自动停止位
    I2C1->TXDR = data; // 发送数据
    while (!(I2C1->ISR & I2C_ISR_STOPF)); // 等待传输完成
}

void main() {
    RCC->APB1ENR |= RCC_APB1ENR_I2C1EN; // 使能I2C1时钟
    I2C1->CR1 &= ~I2C_CR1_PE; // 关闭I2C1
    I2C1->TIMINGR = 0x00707CBB; // 根据外设要求设置时序参数
    I2C1->OAR1 = 0; // 清空地址寄存器
    I2C1->CR1 |= I2C_CR1_PE; // 开启I2C1

    I2C_Master_Send(0x50, 0xAA); // 向地址为0x50的从设备发送数据0xAA
}
②从设备接收:将板卡设置为I2C从设备,并接收来自主机的数据。
#include "n32g031.h"

void I2C_Slave_Receive() {
    uint8_t data = I2C1->RXDR; // 接收主机发送的数据
    // 处理接收到的数据
}

void main() {
    RCC->APB1ENR |= RCC_APB1ENR_I2C1EN; // 使能I2C1时钟
    I2C1->CR1 &= ~I2C_CR1_PE; // 关闭I2C1
    I2C1->TIMINGR = 0x00707CBB; // 根据外设要求设置时序参数
    I2C1->OAR1 = 0xA0; // 设置从设备地址
    I2C1->CR1 |= I2C_CR1_PE; // 开启I2C1

    while (1) {
      if (I2C1->ISR & I2C_ISR_ADDR) { // 检测到地址匹配
            I2C_Slave_Receive(); // 从主机接收数据
      }
    }
}
5、SPI测试
通过使用板卡的SPI接口,我们进行了以下测试:


主机发送:将板卡设置为SPI主机,并向外部设备发送数据。
#include "n32g031.h"

void SPI_Master_Send(uint8_t data) {
    SPI1->DR = data; // 发送数据
    while (!(SPI1->SR & SPI_SR_TXE)); // 等待发送完成
}

void main() {
    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // 使能SPI1时钟
    SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_SPE; // 设置为主机模式,使能软件片选,设置软件片选信号
    while (1) {
      SPI_Master_Send(0xAA); // 向外部设备发送数据0xAA
    }
}
从设备接收:将板卡设置为SPI从设备,并接收来自主机的数据。
#include "n32g031.h"

uint8_t SPI_Slave_Receive() {
    return SPI1->DR; // 接收主机发送的数据
}

void main() {
    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // 使能SPI1时钟
    SPI1->CR1 = SPI_CR1_SPE; // 使能SPI1
    while (1) {
      if (SPI1->SR & SPI_SR_RXNE) { // 检测到接收缓冲区非空
            uint8_t data = SPI_Slave_Receive(); //
今天就先分享到这里!


页: [1]
查看完整版本: 【N32G031开发板】开箱+ I/O测试