西南科技大学智能系统与智慧服务创新实践班嵌入式通用模块库,用于全国大学生电子设计大赛。
| 模块 | 功能 | 特性 |
|---|---|---|
| data_communication_pkg | 数据通信协议 | 支持串口/SPI/I2C,CRC16校验 |
| Encoder | 编码器接口 | MG370霍尔编码器,多实例管理 |
| NanwanAHRS | 姿态估计 | 四阶龙格-库塔积分,6轴/9轴 |
| servo_sg90 | 舵机控制 | 0-180°精确控制,速度控制 |
| NRF24L01/hw_spi | 无线通信(硬件SPI) | 2.4GHz,硬件SPI接口 |
| NRF24L01/soft_spi | 无线通信(软件SPI) | 2.4GHz,纯GPIO实现 |
| OLED_u8g2 | OLED显示 | 基于U8g2库,128x64像素 |
- 克隆仓库
git clone https://github.com/nanwanuser/IPCS-Embedded-Module.git-
复制所需模块文件到工程目录
-
根据模块README进行配置和使用
- 文件命名:
模块名.c和模块名.h - 函数命名:
模块名_功能动词() - 变量命名: 下划线分隔的小写字母
/* ========================= 用户配置参数区 ========================= */
#define FRAME_HEADER 0xAA55
#define MAX_DATA_LENGTH 256
/* ========================= 数据类型定义 ========================= */
typedef enum {
STATUS_OK = 0,
STATUS_ERROR
} ModuleStatus;
/* ========================= API函数接口 ========================= */
void module_init(void);
int module_process(uint8_t *data, uint16_t len);
/* ========================= 用户实现接口 ========================= */
void user_transmit(uint8_t *data, uint16_t len);
void user_callback(uint8_t cmd, uint8_t *data, uint16_t len);/**
* @brief 函数简要说明
* @param 参数名 : 参数说明
* @retval 返回值说明
* @note 注意事项或补充说明
*/每个模块的README包含:
- 模块简介 - 功能描述和主要特性
- API函数接口 - 基本函数和用户实现函数
- 使用示例 - 初始化、基本使用、实际应用
#include "data_communication_pkg.h"
int main(void)
{
HAL_Init();
MX_USART1_UART_Init();
data_comm_init();
// 发送传感器数据
uint8_t data[] = {0x12, 0x34, 0x56, 0x78};
data_comm_send(0x01, data, 4);
while(1);
}
void user_transmit(uint8_t *data, uint16_t len)
{
HAL_UART_Transmit(&huart1, data, len, 100);
}#include "encoder_module.h"
int main(void)
{
encoder_handle_t encoder;
HAL_Init();
MX_TIM2_Init();
Encoder_QuickInit(&htim2, &encoder);
while(1) {
int16_t speed = Encoder_GetSpeed(encoder);
float position = Encoder_GetPosition(encoder);
printf("速度: %d RPM, 位置: %.1f mm\n", speed, position);
HAL_Delay(100);
}
}#include "nanwan_ahrs.h"
int main(void)
{
HAL_Init();
nanwan_ahrs_init(NULL); // 默认配置
while(1) {
float roll, pitch, yaw;
nanwan_ahrs_get_euler_degrees(&roll, &pitch, &yaw);
printf("姿态: Roll=%.1f° Pitch=%.1f° Yaw=%.1f°\n", roll, pitch, yaw);
HAL_Delay(100);
}
}#include "servo_control.h"
int main(void)
{
HAL_Init();
MX_TIM3_Init();
servo_init();
while(1) {
servo_set_angle_speed(0, 0.0, 45.0); // 转到0°
HAL_Delay(2000);
servo_set_angle_speed(0, 180.0, 45.0); // 转到180°
HAL_Delay(2000);
}
}#include "nrf24l01_hardware_spi.h"
int main(void)
{
HAL_Init();
MX_SPI1_Init();
nrf24l01_hw_init();
// 发送端
uint8_t data[] = "Hello NRF24L01!";
nrf24l01_hw_tx_mode(40, NULL);
nrf24l01_hw_send(data, sizeof(data));
// 接收端
uint8_t rx_buffer[32];
nrf24l01_hw_rx_mode(40, NULL);
uint8_t len = nrf24l01_hw_receive(rx_buffer, sizeof(rx_buffer));
while(1);
}- Fork本仓库
- 创建新分支 (
git checkout -b feature/your-module-name) - 提交更改 (
git commit -m 'Add: 模块描述') - 推送到分支 (
git push origin feature/your-module-name) - 创建Pull Request
MIT License