- 2025-01-17
-
回复了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记02(GPIO口应用)
CoderX9527 发表于 2025-1-16 23:11
学习了,python 开发MCU应用真的是太方便了,几行代码的事情。
不在乎效率的话树莓派下,基本是python开发
- 2025-01-14
-
回复了主题帖:
【MCXA156开发板测评】学习笔记01(开发环境搭建)
rkf666666 发表于 2025-1-6 13:21
学习学习!
相互学习
-
回复了主题帖:
【瑞萨FPB_RA6E2】测评-学习笔记01(开发环境搭建和Debug调试)
程英茂 发表于 2024-10-29 18:43
mdk怎么做?
MDK的话,也需要专门的编译工具链
-
回复了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记02(GPIO口应用)
秦天qintian0303 发表于 2025-1-9 22:28
用树莓派5运行Python 如何查看都运行了那些内容
python是树莓派开发的标配了
- 2025-01-13
-
发表了主题帖:
【MCXA156开发板测评】学习笔记04(低功耗评测)
# MCXA156芯片低功耗测评
MCXA156芯片是目前广泛应用于嵌入式系统、物联网设备以及智能硬件中的高效能芯片之一。它以低功耗、高性能和高度集成的特性在多个行业中得到了广泛的应用。本篇文章将围绕MCXA156芯片的低功耗性能进行详细测评,分析其在不同工作模式下的表现,以及如何在实际应用中实现功耗优化。
## 一、MCXA156芯片简介
MCXA156芯片基于先进的制程工艺,集成了多种核心功能,包括高速处理器、丰富的外设接口以及强大的通信能力。它支持多个低功耗模式,能够根据不同的应用需求自动切换工作状态,最大限度地延长设备的使用时间。该芯片的主要特点之一是其低功耗特性,尤其适用于电池供电的便携设备或长时间运行的嵌入式系统。通过硬件和软件的优化,MCXA156芯片能够在保证高性能的同时,显著降低能耗,从而延长设备的电池使用寿命。
## 二、功耗测评环境与测试方法
为了对MCXA156芯片的低功耗性能进行全面评估,我们设计了多个测试场景,分别模拟芯片在不同工作模式下的功耗表现。测试环境包括:
- **操作系统**:目前运行基于裸机环境下进行测试,确保测量结果接近实际应用中的情况。只保留低功耗串口和唤醒定时器;
- **测试工具**:使用万用表测量芯片的功耗,并通过设置不同工作模式来评估不同场景下的功耗差异。
- **工作模式**:包括睡眠模式、深度睡眠模式、断电关机模式以及深度断电关机模式等。
## 三、低功耗测试结果
### **APP_PowerModeSleep(睡眠模式)**
- **描述**:在睡眠模式下,设备会关闭大部分非关键性外设,但CPU保持活跃。该模式用于降低功耗的同时,仍然能够进行轻量的处理和响应外部中断。
- **功耗特点**:功耗相较于正常工作模式降低,但仍然保持一定的处理能力。适用于需要定期唤醒来执行任务的场景。
- **适用场景**:适合于一些传感器设备,设备需要定期采集数据或处理少量信息时。
**函数调用**:`APP_EnterSleepMode()`,进入睡眠模式。
```
static void APP_EnterSleepMode(void)
{
cmc_power_domain_config_t config;
config.clock_mode = kCMC_GateCoreClock;
config.main_domain = kCMC_ActiveOrSleepMode;
CMC_EnterLowPowerMode(APP_CMC, &config);
}
```
### **APP_PowerModeDeepSleep(深度睡眠模式)**
- **描述**:在深度睡眠模式下,除了最低限度的系统资源(如时钟和中断控制)外,其他大部分硬件外设都会被关闭。CPU的处理能力大大减弱,只有特定的硬件模块(如RTC)会保持活动状态,允许设备在指定时间内唤醒。
- **功耗特点**:功耗显著低于睡眠模式。适用于那些对响应时间要求较低,但需要较长时间待机的设备。
- **适用场景**:长时间待机的无线传感器节点、可穿戴设备等。
**函数调用**:`APP_EnterDeepSleepMode()`,进入深度睡眠模式。
```C
static void APP_EnterDeepSleepMode(void)
{
cmc_power_domain_config_t config;
config.clock_mode = kCMC_GateAllSystemClocksEnterLowPowerMode;
config.main_domain = kCMC_DeepSleepMode;
CMC_EnterLowPowerMode(APP_CMC, &config);
}
```
### **APP_PowerModePowerDown(省电模式)**
- **描述**:在省电模式下,系统会关闭更多外设和子模块,CPU保持最小的活动以实现最大程度的功耗减少。大多数外设(如通信模块、显示器等)都会被完全关闭,只有极其重要的系统功能(如时钟、RTC等)保持活动,唤醒通常依赖于外部事件或定时器。
- **功耗特点**:功耗大幅降低。适合对响应时间要求非常低的应用,特别是电池供电的设备。
- **适用场景**:电池供电设备的超长待机模式,例如果智能设备、监控系统等。
**函数调用**:`APP_EnterPowerDownMode()`,进入省电模式。
```
static void APP_EnterPowerDownMode(void)
{
cmc_power_domain_config_t config;
config.clock_mode = kCMC_GateAllSystemClocksEnterLowPowerMode;
config.main_domain = kCMC_PowerDownMode;
CMC_EnterLowPowerMode(APP_CMC, &config);
}
```
### **APP_PowerModeDeepPowerDown(深度省电模式)**
- **描述**:在深度省电模式下,系统将关闭几乎所有外设和子系统,几乎所有模块都停止工作,甚至包括CPU。仅保留极少的功能,如时钟、RTC等,可以保证设备长时间完全不工作,但仍可以周期性唤醒。该模式是最极端的低功耗状态。
- **功耗特点**:功耗最低,适用于长期不需要任何活动的设备。
- **适用场景**:例如远程传感器节点长期待机、需要几个月或几年的电池续航的设备。
**函数调用**:`APP_EnterDeepPowerDownMode()`,进入深度省电模式。
```C
static void APP_EnterDeepPowerDownMode(void)
{
cmc_power_domain_config_t config;
config.clock_mode = kCMC_GateAllSystemClocksEnterLowPowerMode;
config.main_domain = kCMC_DeepPowerDown;
CMC_EnterLowPowerMode(APP_CMC, &config);
}
```
最后都是调用CMC_EnterLowPowerMode函数:
```
void CMC_EnterLowPowerMode(CMC_Type *base, const cmc_power_domain_config_t *config)
{
assert(config != NULL);
#if (CMC_PMCTRL_COUNT > 1U)
/* The WAKE domain must never be configured to a lower power mode compared with main power mode. */
assert(config->wake_domain main_domain);
#endif /* (CMC_PMCTRL_COUNT > 1U) */
if (config->clock_mode < kCMC_GateAllSystemClocksEnterLowPowerMode)
{
/* In This case the power domain doesn't need to be placed in low power state. */
/* Note: unlock the register if this API will be reinvoked later. */
CMC_SetClockMode(base, config->clock_mode);
CMC_SetMAINPowerMode(base, kCMC_ActiveOrSleepMode);
#if (CMC_PMCTRL_COUNT > 1U)
CMC_SetWAKEPowerMode(base, kCMC_ActiveOrSleepMode);
#endif /* (CMC_PMCTRL_COUNT > 1U) */
/* Before executing WFI instruction read back the last register to
* ensure all registers writes have completed. */
(void)base->CKCTRL;
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
__DSB();
__WFI();
__ISB();
}
else
{
/* Note: unlock the register if this API will be reinvoked later. */
CMC_SetClockMode(base, kCMC_GateAllSystemClocksEnterLowPowerMode);
CMC_SetMAINPowerMode(base, config->main_domain);
#if (CMC_PMCTRL_COUNT > 1U)
CMC_SetWAKEPowerMode(base, config->wake_domain);
#endif /* (CMC_PMCTRL_COUNT > 1U) */
/* Before execute WFI instruction read back the last register to
* ensure all registers writes have completed. */
#if (CMC_PMCTRL_COUNT > 1U)
if ((CMC_GetWAKEPowerMode(base) == config->wake_domain) && (CMC_GetMAINPowerMode(base) == config->main_domain))
{
#endif /* (CMC_PMCTRL_COUNT > 1U) */
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
__DSB();
__WFI();
__ISB();
#if (CMC_PMCTRL_COUNT > 1U)
}
#endif /* (CMC_PMCTRL_COUNT > 1U) */
}
}
```
## 四、功耗优化策略
为了进一步优化MCXA156芯片的功耗,可以采取以下几种策略:
1. **动态调整工作模式**: 根据实际应用需求,合理切换芯片的工作模式。例如,在设备处于空闲状态时,自动进入睡眠模式或深度睡眠模式,最大限度降低能耗。
2. **合理配置外设**: 外设如通信模块(Wi-Fi、蓝牙)和传感器的功耗通常较大,因此在不需要时应关闭相关外设,避免不必要的能量消耗。
3. **使用低功耗算法**: 在数据处理和通信过程中,采用低功耗算法,例如低功耗蓝牙(BLE)协议进行数据传输,可以显著减少能量消耗。
## 五、总结
总体来看,MCXA156芯片在不同工作模式下展现出了优异的低功耗性能,特别是在省电模式和深度睡眠模式下,能够显著降低功耗,延长设备的使用时间。结合其强大的计算能力和丰富的外设支持,MCXA156芯片非常适合用于物联网、智能家居等领域。通过合理的功耗管理策略,可以进一步提高设备的电池续航能力,满足现代嵌入式系统对低功耗和高性能的双重需求。在未来的应用中,随着技术的不断发展,MCXA156芯片的功耗优化空间依然存在。通过硬件和软件的进一步优化,我们相信其低功耗特性将在更多智能设备中得到广泛应用,推动智能硬件向更长时间的续航目标迈进。
具体低功耗测量请查看链接:
https://www.bilibili.com/video/BV1VYcVeQEyu/
-
回复了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记02(GPIO口应用)
hjh0512 发表于 2025-1-12 21:11
哎,树莓派功能确实是越来越厉害了,但要是能再便宜点,就好了。
树莓派就是小型的PC电脑,个人服务器,NAS,开发等等都可以
- 2025-01-12
-
发表了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记03(PWM应用)
树莓派5(Raspberry Pi 5)是一款功能强大且价格实惠的小型计算机,可以广泛应用于各种硬件控制项目。通过树莓派的GPIO引脚,可以轻松控制各种硬件设备,比如舵机。舵机(servo motor)是常见的电动驱动设备,广泛应用于机器人、遥控模型、自动化控制等领域。通过PWM(脉宽调制)信号控制舵机的角度,树莓派5可以实现对舵机的精确控制。
本文将介绍如何使用树莓派5的GPIO接口,通过PWM信号控制舵机的旋转角度。
### 1. 什么是舵机(Servo Motor)?
舵机是一种具有反馈控制系统的电动机,能够根据输入信号调整角度。与常规电动机不同,舵机并不是连续旋转的,而是可以在特定范围内(通常是0°到180°)调整其角度。舵机通过接收PWM信号来确定其角度,PWM信号的占空比(duty cycle)决定了舵机的转动角度。
- 占空比与角度的关系
:舵机的PWM信号通常为50Hz的周期,周期为20毫秒。占空比的大小决定了舵机转动的角度。例如:
- 0°对应大约 5% 的占空比(1毫秒)
- 90°对应大约 10% 的占空比(1.5毫秒)
- 180°对应大约 15% 的占空比(2毫秒)
### 2. 树莓派5和舵机的连接
树莓派5具有多个GPIO引脚,可以用来控制外部设备。舵机一般有三根线:
- **VCC(红色)**:供电线,通常接5V电源。
- **GND(黑色或棕色)**:接地线,接树莓派的GND。
- **信号线(黄色或橙色)**:接树莓派的GPIO引脚,用于接收PWM信号。
对于大多数舵机,供电需要5V,通常树莓派的GPIO电压为3.3V,这意味着舵机需要通过外部电源供电,而信号线仍然可以直接连接到树莓派的GPIO引脚。
### 3. 安装所需的库
为了在树莓派上使用PWM信号控制舵机,我们需要使用Python的 `RPi.GPIO` 库。这个库允许我们通过GPIO接口与硬件进行交互。
首先,确保树莓派系统已经安装了 `RPi.GPIO` 库。如果未安装,可以使用以下命令安装:
```
bash复制代码sudo apt-get update
sudo apt-get install python3-rpi.gpio
```
### 4. 使用PWM控制舵机
在Python中,使用 `RPi.GPIO` 库可以非常方便地控制GPIO引脚输出PWM信号,从而控制舵机的角度。以下是一个简单的示例,展示如何通过树莓派5驱动舵机:
```
python复制代码import RPi.GPIO as GPIO # 导入 Raspberry Pi GPIO 库,用于控制 GPIO 引脚
import time # 导入时间模块,用于设置延时
# 设置 GPIO 模式
GPIO.setmode(GPIO.BCM) # 设置 GPIO 引脚的编号模式为 BCM(Broadcom SOC 引脚编号)
# 设置舵机的 GPIO 引脚
servo_pin = 16 # 舵机连接到树莓派的 GPIO 16 引脚
GPIO.setup(servo_pin, GPIO.OUT) # 将 GPIO 16 设置为输出模式,用来控制舵机
# 设置 PWM(脉宽调制)
pwm = GPIO.PWM(servo_pin, 50) # 设置 PWM 信号的频率为 50Hz(舵机通常使用 50Hz)
pwm.start(0) # 启动 PWM 输出,初始占空比为 0(即没有信号输出)
# 定义一个函数用于设置舵机的角度
def set_angle(angle):
# 将角度转换为对应的占空比
# 舵机的占空比与角度之间的关系为:占空比 = (angle / 18) + 2
# 这个公式是基于舵机的工作原理(50Hz PWM 信号)
duty = angle / 18 + 2 # 计算占空比
GPIO.output(servo_pin, True) # 设置 GPIO 引脚为高电平(启动 PWM 信号)
pwm.ChangeDutyCycle(duty) # 改变 PWM 的占空比,控制舵机的角度
time.sleep(1) # 暂停 1 秒钟,等待舵机完成移动
GPIO.output(servo_pin, False) # 设置 GPIO 引脚为低电平,停止信号
pwm.ChangeDutyCycle(0) # 停止 PWM 输出,关闭信号
try:
# 主循环,用户输入舵机角度
while True:
angle = int(input("输入角度 (0-180): ")) # 提示用户输入一个角度(0 到 180)
if 0
- 2025-01-09
-
发表了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记02(GPIO口应用)
# 在树莓派 5 上驱动 DHT22 传感器
## 介绍
DHT22 是一种常用的温湿度传感器,可以与树莓派 5 进行连接和使用。本指南将引导您完成安装步骤和代码示例,以便您能够读取 DHT22 的温度和湿度数据。
## 硬件需求
- 树莓派 5
- DHT22 传感器
- 面包板和跳线
## 连接方式
将 DHT22 传感器连接到树莓派的方式如下:
- **VCC**: 连接到树莓派的 3.3V 引脚
- **GND**: 连接到树莓派的 GND 引脚
- **Data**: 连接到树莓派的 GPIO 引脚(例如 GPIO 4)
### 连接示意图
VCC->3.3V
GND->GND
Data->GPIO 4
实物图:
![image-20250109104436858](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20250109104436858.png)
## 软件需求
在树莓派上,您需要安装 Python 及相关库来读取 DHT22 的数据。
### 1. 更新系统
打开终端并运行以下命令:
```bash
sudo apt update
sudo apt upgrade
```
```
## 软件需求
在树莓派上,您需要安装 Python 及相关库来读取 DHT22 的数据。
### 1. 更新系统
打开终端并运行以下命令:
```bash
sudo apt update
sudo apt upgrade
```
### 2. 安装依赖项
安装 Python 和 pip:
```
sudo apt install python3 python3-pip
```
### 3. 安装 Adafruit DHT 库
使用 pip 安装 Adafruit DHT 库:
```
pip3 install Adafruit-DHT
```
## 编写测试代码
创建一个新的 Python 文件(例如 `dht22_test.py`),并添加以下代码:
python
运行复制
```
import Adafruit_DHT
# 设置传感器类型和 GPIO 引脚
sensor = Adafruit_DHT.DHT22
pin = 4 # 数据引脚连接到 GPIO 4
# 读取温度和湿度
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print(f'Temperature={temperature:.1f}°C, Humidity={humidity:.1f}%')
else:
print('Failed to get reading. Try again!')
```
## 运行测试代码
在终端中运行以下命令以执行代码:
```
python3 dht22.py
```
终端测试结果:
![](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20250109100924432.png)
- 2025-01-08
-
回复了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记01(开发环境搭建)
sat_hugo 发表于 2025-1-8 09:00
一直想学习,一直没入门。
学起来
- 2025-01-05
-
回复了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记01(开发环境搭建)
秦天qintian0303 发表于 2025-1-5 20:47
系统有很多版本,写哪一版本比较好
64位版本
- 2025-01-03
-
发表了主题帖:
【Raspberry Pi 5测评】树莓派5学习笔记01(开发环境搭建)
本帖最后由 qzc0927 于 2025-1-4 16:49 编辑
# 硬件环境
- 1、windows10专业版
![image-20241010220238435](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010220238435.png)
- 2、树莓派5(4GB)
![image-20241010220140534](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010220140534.png)
![GPIO引脚的编号不是按照数字顺序;GPIO引脚0和1位于板上(物理引脚27和28),但保留供高级使用](https://boreyun.oss-cn-shanghai.aliyuncs.com/ede458b156d7ddbc3e0bae97178374a4.png)
> 树莓派的wiringPi没有仔细看,一开始以为所有的管脚都可以实现硬pwm,浪费了一个下午的时间,后来将说明书拿来一看,只有一个管脚可以,要实现4个舵机的pwm控制,要采用软pwm,赶快改!
![image-20250103141000473](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20250103141000473.png)
# 系统安装
## 安装步骤
- 1、下载Raspberry Pi Imager
> [镜像工具](https://www.raspberrypi.com/software/)
- 2、选择64Bit Lite系统,根据弹出的对话框进行选择;不同硬件版本的树莓派,可以有所差别。
![image-20241009210414734](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241009210414734.png)
- 3、初始化系统配置
![image-20241009224525795](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241009224525795.png)
设置内容包括:账户密码、Wi-Fi名称密码、开启SSH。
![image-20250103133949536](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20250103133949536.png)
![image-20241009224830283](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241009224830283.png)
![image-20241009224846098](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241009224846098.png)
- 4、确认配置
![image-20241009224924739](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241009224924739.png)
这个配置也可以接上显示器,进行配置。当前树莓派安装系统自带桌面的。使用CMD可以查看网络信息。
![image-20241009222103956](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241009222103956.png)
## 查看系统版本信息
- 1. 查看Linux内核版本
```
uname -a
```
或者
```
cat /proc/version
```
- 2. 查看操作系统的位数,32位还是64位
```
getconf LONG_BIT
```
- 3. 查看Raspbian系统版本
```
cat /etc/os-release
```
- 查看Raspbian所基于的Debian版本
```
cat /etc/debian_version
```
更多命令请查看:
> https://blog.csdn.net/weixin_59669309/article/details/134674585
![image-20250103133911609](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20250103133911609.png)
# 串口调试登陆
使用 USB 转 UART 串行线登录树莓派 5
> https://shumeipai.nxez.com/2024/05/07/login-to-your-raspberry-pi-5-using-a-usb-to-uart-cable.html
树莓派配置工具
> https://blog.csdn.net/no1xium/article/details/125617965
需要在root权限下;
# 远程连接
- 1、下载Advanced IP Scanner
> https://www.advanced-ip-scanner.com/cn/download/
- 2、扫描网络
从“制造商”可以看出,在我的网络中,树莓派的IP地址是192.168.0.32,但是我实际操作无法查看,这个时候,需要想起他办法了;
![image-20241009224007134](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241009224007134.png)
- 3、下载Mobaxterm
[远程连接工具](https://mobaxterm.mobatek.net/download.html)
# 远程登录
## 网络设置
- 1、下载Advanced IP Scanner
> [Advanced IP Scanner网络扫描工具](https://www.advanced-ip-scanner.com/cn/)
- 2、扫描网络
![image-20241010102210429](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010102210429.png)
- 3、下载Mobaxterm
> [远程调试工具](https://mobaxterm.mobatek.net/download.html)
4、输入树莓派IP地址
![image-20241010102455600](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010102455600.png)
- 5、输入账户密码
> 帐号:admin
>
> 密码:123456su
![image-20241010102714334](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010102714334.png)
至此,运行桌面版本的树莓派,可以在不接入显示器、鼠标、键盘的情况下,使用计算机进行远程控制。
- 6、root账户设置
树莓派默认使用的是[Debian](https://so.csdn.net/so/search?q=Debian&spm=1001.2101.3001.7020)系统,所以root用户默认没密码且不能远程登陆。设置密码命令:
```
sudo passwd root
```
连续输入两次密码(密码不会显示,直接盲打就好)。出现提示“成功设置”后设置成功。
![image-20241010104236007](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010104236007.png)
从admin账户切换到root账户;
## 切换网络
如果你换个地方,wifi不一样了,就需要重新设置网络;
假设我们现在要从当前的WIFI切换到手机热点的WIFI,有两种方法,第一种,取出树莓派内存卡,用读卡器读到电脑上,在目录中新建文件:wpa_supplicant.conf:
第二种,在树莓派的命令行中输入:
```shell
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
```
无论哪一种,在文件中,填写以下内容:
```
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="wifi1"
psk="password1"
priority=10
}
network={
ssid="wifi2"
psk="password2"
priority=9
}
```
```aPl
其中的名词解释:
ssid:WIFI的名称
psk:WIFI的密码
priority:连接优先级,必须是正数,数字越大优先级越高
因此,我们可以知道这段代码的意思是,正常情况下连接wifi1(注意,这里要改成你的wifi的名称),使用wifi1的psk作为密码(注意,这里要改成你的wifi密码),如检测不到wifi1,那么尝试连接比wifi1优先级低的wifi2网络,以此类推
```
编辑完成后,按`CTRL+X`保存退出;
![img](https://boreyun.oss-cn-shanghai.aliyuncs.com/v2-366f7452f31494904c4c85222136e9e4_720w.webp)
是的……WiFI名称里不能带下划线!实测带[中划线](https://zhida.zhihu.com/search?content_id=173177877&content_type=Article&match_order=2&q=中划线&zhida_source=entity)也不行!抱着并不相信的态度,我链接了自己的手机热点,然后......连上了(黑人问号脸.jpg)。
# 图形化工具VNC
## 树莓派设置
开启VNC功能,使用命令如下:
```
sudo raspi-config
```
选择3.Interfacing Options;
![image-20241010104828576](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010104828576.png)
找到VNC(远程桌面)
![image-20241010104859355](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010104859355.png)
选择 Yes(是)enable
![image-20241010105101501](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010105101501.png)
![image-20241010104950630](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010104950630.png)
然后`sudo reboot` 重启,重启后,会看到vcn在菜单上的图标,需要接显示器,如下图
![image-20241010105028130](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010105028130.png)
## Windows下VNC Viewer程序安装及连接
Windows下VNC Viewer程序安装及连接
VNC-Viewer-6.17.1113-Windows.exe
下载地址如下:链接:https://pan.baidu.com/s/1crS6e-jzfKBhrgvG9GihEg 提取码:xdyu
### VCN Viewer安装步骤
![image-20241010105821046](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010105821046.png)
![image-20241010105911197](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010105911197.png)
![image-20241010105931768](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010105931768.png)
![image-20241010105956429](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010105956429.png)
![image-20241010110010254](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110010254.png)
![image-20241010110032515](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110032515.png)
![image-20241010110047581](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110047581.png)
启动VNCViewer:
![image-20241010110224244](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110224244.png)
![image-20241010110254143](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110254143.png)
### VCN Viewer连接设置
连接设置如下:
![image-20241010110449757](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110449757.png)
这里输入自己实际环境下的树莓派的主机,我这里是`192.168.1.51`,登录用户名为`raspberry`点击继续;
![image-20241010110659931](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110659931.png)
这里输入自己对应的账户名和密码:
> 帐号:admin 密码: 123456
>
> 帐号:root 密码: 123456
连接成功效果图
![image-20241010110939528](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241010110939528.png)
# 安装VIM
安装vim命令
```
sudo apt-get install vim
```
# 更换系统源
参考文档:
> https://blog.csdn.net/2301_80166849/article/details/141302938
再更新系统软件:
```
sudo apt-get update
升级 pip 到最新的版本后进行配置:
python -m pip install --upgrade pip
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
```
> https://developer.baidu.com/article/details/2797589
- 2025-01-02
-
发表了主题帖:
【MCXA156开发板测评】学习笔记03(串口EDMA应用收发)
# 串口EDMA(Enhanced Direct Memory Access)应用
## EDMA概述
NXP 的 EDMA 是 NXP 半导体公司为其微控制器和处理器系列提供的一种高效的直接内存访问解决方案。NXP 的 EDMA 控制器具有许多独特的特性,使其在嵌入式系统中的数据传输任务中非常有效。
- 1、主要特点
1. **多通道支持**
- NXP 的 EDMA 通常支持多个通道,允许同时进行多个数据传输,有效提高系统的并发处理能力。
2. **灵活的传输配置**
- 支持多种传输模式,包括内存到内存、外设到内存和内存到外设的传输。为开发者提供灵活性,可以根据需求选择最合适的传输方式。
3. **链式传输**
- 允许设置链式传输,即在完成一个数据传输后,自动开始下一个传输,减少了手动配置的需求。
4. **事件触发**
- EDMA 可以根据外设事件(如串口接收、ADC转换完成等)自动触发数据传输,减少了 CPU 的负担,提高了响应速度。
5. **优先级管理**
- 支持通道优先级设置,开发者可以根据应用需求配置数据传输的优先级,确保关键任务优先处理。
6. **内存保护**
- 提供对内存的保护,防止数据传输过程中意外访问不合法的内存区域。
7. **DMA 请求合并**
- 支持多个请求合并为一个传输请求,以减少控制器的干扰和延迟。
- 2、应用场景
NXP 的 EDMA 通常用于以下应用场景:
- **音频和视频处理**: 高速数据传输以支持实时音视频处理。
- **数据采集系统**: 从传感器和其他外设快速采集数据。
- **通信系统**: 在串口、I2C、SPI 等接口中实现高效的数据传输。
- **实时控制系统**: 在需要快速响应和高数据吞吐量的控制系统中。
- 3、示例
在 NXP 的微控制器中,使用 EDMA 进行数据传输通常涉及以下步骤:
1. 配置 EDMA 通道。
2. 设置源地址、目标地址和传输大小。
3. 启动传输并设置触发条件。
4. 注册回调函数以处理传输完成的事件。
- 4、总结
NXP 的 EDMA 提供了一种高效、灵活的方式来处理嵌入式系统中的数据传输任务,尤其是在需要高并发和低延迟的场景中。
## 串口EDMA应用
- 1、串口初始化
```C
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
LPUART_GetDefaultConfig(&lpuartConfig);
lpuartConfig.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
lpuartConfig.enableTx = true;
lpuartConfig.enableRx = true;
LPUART_Init(DEMO_LPUART, &lpuartConfig, DEMO_LPUART_CLK_FREQ);
```
- 2、EDMA初始化
```
/* Init the EDMA module */
EDMA_GetDefaultConfig(&userConfig);
EDMA_Init(EXAMPLE_LPUART_DMA_BASEADDR, &userConfig);
EDMA_CreateHandle(&g_lpuartTxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_TX_DMA_CHANNEL);
EDMA_CreateHandle(&g_lpuartRxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_RX_DMA_CHANNEL);
EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR, LPUART_TX_DMA_CHANNEL, DEMO_LPUART_TX_EDMA_CHANNEL);
EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR, LPUART_RX_DMA_CHANNEL, DEMO_LPUART_RX_EDMA_CHANNEL);
/* Create LPUART DMA handle. */
LPUART_TransferCreateHandleEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, LPUART_UserCallback, NULL, &g_lpuartTxEdmaHandle,
&g_lpuartRxEdmaHandle);
```
- 3、编写应用程序
```C
while (1) // 无限循环,持续处理接收和发送
{
/* 如果接收空闲且接收缓冲区为空,则开始从外设接收数据到 g_rxBuffer。 */
if ((!rxOnGoing) && rxBufferEmpty)
{
rxOnGoing = true; // 标记接收操作正在进行
LPUART_ReceiveEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, &receiveXfer); // 开始接收数据
}
/* 如果发送空闲且发送缓冲区已满,则开始发送数据。 */
if ((!txOnGoing) && txBufferFull)
{
txOnGoing = true; // 标记发送操作正在进行
LPUART_SendEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, &sendXfer); // 开始发送数据
}
/* 如果 g_txBuffer 为空且 g_rxBuffer 已满,复制 g_rxBuffer 到 g_txBuffer。 */
if ((!rxBufferEmpty) && (!txBufferFull))
{
memcpy(g_txBuffer, g_rxBuffer, ECHO_BUFFER_LENGTH); // 将接收的数据复制到发送缓冲区
rxBufferEmpty = true; // 更新接收缓冲区状态
txBufferFull = true; // 更新发送缓冲区状态
}
}
```
- 4、回调函数处理
```
void LPUART_UserCallback(LPUART_Type *base, lpuart_edma_handle_t *handle, status_t status, void *userData)
{
userData = userData;
if (kStatus_LPUART_TxIdle == status)
{
txBufferFull = false;
txOnGoing = false;
}
if (kStatus_LPUART_RxIdle == status)
{
rxBufferEmpty = false;
rxOnGoing = false;
}
}
```
这个回调函数跟STM32的串口回调函数`void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)`类似的;
- 5、串口中断调试验证
![image-20250102111558751](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20250102111558751.png)
可以看到,通过EDMA接收串口数据后,同样以EDMA发送出来;
- 2024-12-30
-
发表了主题帖:
【MCXA156开发板测评】学习笔记02(调试和串口应用收发)
## 调试运行
点击运行按钮,执行程序:
![image-20241229215957162](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229215957162.png)
运行代码,通过官方推荐的Tera Term VT软件或者串口调试助手显示出串口打印的信息:
![image-20241229215821855](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229215821855.png)
## 配置引脚
![image-20241229220101394](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220101394.png)
低功耗串口引脚配置引脚界面如下:
![image-20241229220221491](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220221491.png)
配置当前引脚为GPIO口:
![image-20241229220353427](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220353427.png)
配置引脚为串口:
![image-20241229220545274](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220545274.png)
然后配置选择引脚的方向,以及其他配置项:
![image-20241229220633954](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220633954.png)
## 更新代码
引脚配置好了,最后选择更新源代码。
![image-20241229220727566](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220727566.png)
如果单击更改,可以跳转到代码修改比对,能清楚的知道修改了那些代码,单击确定,更新代码。确认代码运行情况。
![image-20241229220824923](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220824923.png)
## 视图切换
最后返回源代码视图,查看与编辑代码:
![image-20241229220935916](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241229220935916.png)
## 串口接收数据
接收数据可以通过中断或轮询方式实现
- 1、轮询接收
使用轮询方式接收数据的示例
```C
void LPUART_ReceiveData(void) {
uint8_t rxBuff[10];
size_t bytesRead;
// 读取数据
bytesRead = LPUART_ReadBlocking(DEMO_LPUART, rxBuff, sizeof(rxBuff) - 1);
rxBuff[bytesRead] = '\0'; // 添加字符串结束符,便于处理
// 处理接收到的数据
}
```
- 2、中断接收数据
如果使用中断接收数据,您需要设置中断服务例程(ISR):
```C
void DEMO_LPUART_IRQHandler(void)
{
uint8_t data; // 存储接收到的数据字节
uint16_t tmprxIndex = rxIndex; // 临时存储接收索引,避免在中断中直接修改
uint16_t tmptxIndex = txIndex; // 临时存储发送索引,用于检查环形缓冲区是否已满
/* 检查是否有新数据到达 */
if ((kLPUART_RxDataRegFullFlag & LPUART_GetStatusFlags(DEMO_LPUART)))
{
data = LPUART_ReadByte(DEMO_LPUART); // 从 LPUART 接收一个字节的数据
/* 如果环形缓冲区未满,则将数据添加到缓冲区 */
if (((tmprxIndex + 1) % DEMO_RING_BUFFER_SIZE) != tmptxIndex)
{
demoRingBuffer[rxIndex] = data; // 将接收到的数据存入环形缓冲区
rxIndex++; // 递增接收索引
rxIndex %= DEMO_RING_BUFFER_SIZE; // 确保接收索引在缓冲区大小范围内循环
}
}
SDK_ISR_EXIT_BARRIER; // 确保中断服务例程的正确退出
}
```
## 测试结果
编写测试程序,不断接收串口的数据,并打印出来。
```C
int main(void)
{
uint8_t ch;
lpuart_config_t config;
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
/*
* config.baudRate_Bps = 115200U;
* config.parityMode = kLPUART_ParityDisabled;
* config.stopBitCount = kLPUART_OneStopBit;
* config.txFifoWatermark = 0;
* config.rxFifoWatermark = 0;
* config.enableTx = false;
* config.enableRx = false;
*/
LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(DEMO_LPUART, &config, DEMO_LPUART_CLK_FREQ);
LPUART_WriteBlocking(DEMO_LPUART, txbuff, sizeof(txbuff) - 1);
while (1)
{
LPUART_ReadBlocking(DEMO_LPUART, &ch, 1);
LPUART_WriteBlocking(DEMO_LPUART, &ch, 1);
}
}
```
打开串口终端调试助手,查看数据收发:
![image-20241230112820214](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241230112820214.png)
- 2024-12-26
-
回复了主题帖:
【MCXA156开发板测评】学习笔记01(开发环境搭建)
重新安装IDE就解决了,说我有一个link server 没有安装导致工具链有问题
- 2024-12-25
-
发表了主题帖:
【MCXA156开发板测评】学习笔记01(开发环境搭建)
NCXA156学习笔记
目录
[TOC]
# 开发环境搭建
## 帐号注册
在官网上下载工具,需要注册NXP的帐号,注册帐号的时候要注意,国内的邮箱服务器好像是收不到验证码的,我这边是使用谷歌帐号进行注册,收到验证码,注册完成后下载软件。
![image-20241225144113144](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144113144.png)
## 软件安装
软件下载地址为:
https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE?tid=vanMCUXPRESSO/IDE
![image-20241225144511839](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144511839.png)
点击Download进行下载:
![image-20241225144544410](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144544410.png)
下载最新版本的NXP开发软件,版本为24.9.
![image-20241225144227499](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144227499.png)
打开后进行安装。选择D盘目录,配置好工作空间目录,进行安装。安装完成,打开IDE,界面如下:
![image-20241225144328440](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144328440.png)
## 环境搭建
- 1、创建工程
![image-20241225144705082](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144705082.png)
- 2、搜索开发板
![image-20241225144803949](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144803949.png)
根据型号选择指定开发开发板:
![image-20241225144926726](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225144926726.png)
![image-20241225145007566](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225145007566.png)
- 3、导入例程
![image-20241225145827413](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225145827413.png)
![image-20241225150025009](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225150025009.png)
- 4、打开例程
![image-20241225151154460](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225151154460.png)
进行编译,发现编译报错,报错信息如下:
![image-20241225152709938](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225152709938.png)
![image-20241225151230362](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241225151230362.png)
## 错误处理
```
The name was interpreted by this TemplateLoader: com.crt.advproject.linkertemplate.FMLinkerFileTemplateLoader@2088726e.
make[1]: *** [makefile:51: frdmmcxa156_hello_world.axf] Error 1
make: *** [makefile:42: all] Error 2
"make -r -j12 all" terminated with exit code 2. Build might be incomplete.
```
不知道那里配置错误,导致无法编译。感觉是我的工具链配置不对。
# 参考文献
> https://blog.csdn.net/redparrot2008/article/details/143330575
> https://www.nxp.com.cn/document/guide/getting-started-with-frdm-mcxn947:GS-FRDM-MCXNXX
-
回复了主题帖:
测评入围名单:Raspberry Pi 5(树莓派目前性能最强代表)
个人信息无误,确认可以完成测评分享计划
-
回复了主题帖:
有奖活动 | 英飞凌新品情报站:最新5V XENSIV™ PAS CO2传感器
英飞凌XENSIV™ PAS CO2 5V 传感器 驱动测试:驱动程序设计测试
- 2024-12-19
-
回复了主题帖:
测评入围名单: NXP MCX A系列 FRDM-MCXA156开发板
个人信息无误,确认可以完成测评分享计划
- 2024-12-09
-
发表了主题帖:
极海APM32M3514电机通用评估板学习笔记01(开发环境搭建和RTT调试输出)
本帖最后由 qzc0927 于 2024-12-9 15:47 编辑
# 准备资料
## 硬件开发工具
> https://www.geehy.com/design/hardware
> https://www.geehy.com/design/hardware_detail/77
找到我们对应的电机开发板资料。如下图所示:
![image-20241206171314344](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241206171314344.png)
## 软件开发工具
> https://www.geehy.com/design/software
找到我们对应的电机开发板的资料,如下图所示:
![image-20241206171225270](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241206171225270.png)
# 工程结构
## 开发环境搭建
使用keil进行开发,创建工程,编译;
![image-20241209104247683](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241209104247683.png)
## 电源供电问题
我的板子type-c电源供电没用,但是程序可以下载,导致我程序对的,无法运行;后面直接用12V电源供电了;
## GPIO操作
GPIO的操作,使用板载LED灯进控制实现;
### 硬件设计
![image-20241209105316548](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241209105316548.png)
![image-20241209105341816](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241209105341816.png)
从原理图可以看出,使用引脚PA12来实现 LED灯闪烁来判断系统工作状态;
### 软件设计
- 1、头文件定义:
```C
#ifndef __DRV_LED_H
#define __DRV_LED_H
#include
#define LED_N 2 //预留一个,LED1作为电源指示灯,默认从LED2开始
#define LED2_PIN GPIO_PIN_12
#define LED2_GPIO_PORT GPIOA
#define LED2_GPIO_CLK RCM_AHB_PERIPH_GPIOA
#define LED3_PIN GPIO_PIN_1
#define LED3_GPIO_PORT GPIOC
#define LED3_GPIO_CLK RCM_AHB_PERIPH_GPIOC
//typedef
typedef enum
{
LED2 = 0,
LED3 = 1
} LED_T;
#ifdef __cplusplus
extern "C" {
#endif
//函数声明
void LedGpioInit(void);
void LedToggle(LED_T Led);
#ifdef __cplusplus
}
#endif
#endif
```
- 2、源文件代码:
```C
#include "drv_led.h"
#include
//其他库的头文件
#include "apm32m35xx_rcm.h"
#include "apm32m35xx_gpio.h"
#include "apm32m35xx_misc.h"
//#include "bsp.h"
GPIO_T* GPIO_PORT[LED_N] = {LED2_GPIO_PORT, LED3_GPIO_PORT};
const GPIO_PIN_T GPIO_PIN[LED_N] = {LED2_PIN, LED3_PIN};
const RCM_AHB_PERIPH_T GPIO_CLK[LED_N] = {LED2_GPIO_CLK, LED3_GPIO_CLK};
void LedGpioInit(void)
{
GPIO_Config_T gpioConfig;
RCM_EnableAHBPeriphClock(LED2_GPIO_CLK);
/* LED2 GPIO configuration */
gpioConfig.pin = LED2_PIN;
gpioConfig.mode = GPIO_MODE_OUT;
gpioConfig.outtype = GPIO_OUT_TYPE_PP;
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.pupd = GPIO_PUPD_NO;
GPIO_Config(LED2_GPIO_PORT, &gpioConfig);
}
void LedOn(LED_T Led)
{
GPIO_PORT[Led]->BSC = GPIO_PIN[Led];
}
void LedOff(LED_T Led)
{
GPIO_PORT[Led]->BR = GPIO_PIN[Led];
}
void LedToggle(LED_T Led)
{
GPIO_PORT[Led]->ODATA ^= GPIO_PIN[Led];
}
```
- 3、编写测试函数
```c
int main(void)
{
BspInit();
DriverInit();
while (1)
{
APM_DelayMs(1000);
LedToggle(LED2);
}
}
```
- 3、结果验证
烧录程序后,可以看到板载LED每隔1秒闪烁;
## 串口通讯
### 硬件设计
![image-20241209141206762](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241209141206762.png)
![image-20241209141239057](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241209141239057.png)
排查发现,串口和晶振是公用引脚接口,板子默认为晶振接口,R44和R45电阻未焊接,串口未连接,后续软件先不处理,采用RTT_Viewer作为调试接口使用;
### 软件设计
//硬件接口复用了,先不做处理
## RTT Viewer
### RTT Viewer概述
所谓RTT,即是实时传输技术,我们所用到的组件是由SEGGER公司开发,这家公司一款比较广为人知的产品就是J-link,支持所有ARM芯片的调试和仿真。RTT允许目标设备和主机之间进行双向通信,比传统的 UART 调试更快、更可靠,并且几乎不会影响到程序的运行,占用的资源非常
### RTT Viewer移植
具体移植过程参考下面这篇文章,这里不在多说明。
> https://blog.csdn.net/weixin_42530814/article/details/138866691
### 结果验证
编写测试程序:
```C
int main(void)
{
BspInit();
DriverInit();
while (1)
{
APM_DelayMs(1000);
DEBUG_LOG("LedToggle");
LedToggle(LED2);
}
}
```
打开第三方RTT Viewer客户端,查看终端输出:
![image-20241209151124034](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20241209151124034.png)
- 2024-11-27
-
回复了主题帖:
测评入围名单:极海APM32M3514电机通用评估板
个人信息无误,确认可以完成测评分享计划。