(1)搭建好 Zephyr 环境后。
明确自己使用的硬件属于哪一类,
这里以stm32h723zg为例:
在这里插入图片描述
如图中的配置,注意当环境搭建好后,及时保留备份。
(2)进入 Zephyr 中
在这里插入图片描述
创建属于自己的工程,如:我当前使用的 my_file_project。
工程是通过复制
在这里插入图片描述
该工程到自己的工程目录下。
为了快速使用:这里就省去一些无关紧要的细节,只从使用角度进行说明。
进入下面文件夹,没有就创建文件夹添加 app.overlay(当明确自己的硬件时直接使用硬件命名也可)。这里为了简洁就删除了原本的文件,只保留自己当前硬件的文件。
在这里插入图片描述
记住之后操作,基本围绕 xx.overlay、prj.conf、xxx.dts、main.c 等几个文件进行操作。

首先,硬件如何确认是否存在?如当前的 nucleo_h723zg,本质就是一个最小系统板。在如下路径这里的 dts 文件需要提前备份,因为 dts 文件配置需要结合你自己的实际硬件进行细微调整。
在这里插入图片描述
如何调整dts文件,结合cubemx软件,主要调整系统时钟。
在这里插入图片描述
根据这张图就能调整,dts里的时钟了。
如下就是根据上面这张图进行的调整。


&clk_lsi {
	status = "okay";
};

&clk_hsi48 {
	status = "okay";
};
&gpiog {
	status = "okay";
};
&clk_hse {
	/*hse-bypass;*/
	clock-frequency = <DT_FREQ_M(25)>; /* STLink 8MHz clock */
	status = "okay";
};

&clk_lse {
	status = "okay";
};

&pll {
	div-m = <2>;
	mul-n = <44>;
	div-p = <1>;
	div-q = <2>;
	div-r = <2>;
	clocks = <&clk_hse>;
	status = "okay";
};

&pll2 {
	div-m = <32>;
	mul-n = <129>;
	div-p = <2>;
	div-q = <2>;
	div-r = <2>;
	clocks = <&clk_hse>;
	status = "disabled";
};

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(550)>;
	d1cpre = <1>;
	hpre = <2>;    /* HCLK: 275   MHz */
	d1ppre = <2>;  /* APB1: 137.5 MHz */
	d2ppre1 = <2>; /* APB2: 137.5 MHz */
	d2ppre2 = <2>; /* APB3: 137.5 MHz */
	d3ppre = <2>;  /* APB4: 137.5 MHz */
};

这里调整基本就不用动了,折后根据自己的项目需求再做调整。
当不知道某些外设如何调整时
也可参照其他的dts对相关外设进行配置调整,
另外需要注意:如下的dtsi这里也是硬件描述相关的,里面有对应的外设描述
即寄存器地址,中断,dma,timer ,iic等等外设的一下基本属性配置信息。
在这里插入图片描述关于prj.conf文件基本是由:
CONFIG_xxxxxx=y/n 组成的,至于这些CONFIG_有哪些,可通过
在这里插入图片描述
这里Kconfig文件进行查看与配置,基本上Kconfig文件打开就有相关的配置说明。

之后就是对mian.c的编辑。
如:

#include <stdio.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>

/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS 1000

/* The devicetree node identifier for the "led0" alias. */
#define LED0_NODE DT_ALIAS(led0)

/*
 * A build error on this line means your board is unsupported.
 * See the sample documentation for information on how to fix this.
 */
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

int main(void)
{
	int ret;
	bool led_state = true;

	if (!gpio_is_ready_dt(&led)) {
		return 0;
	}

	ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
	if (ret < 0) {
		return 0;
	}

	while (1) {
		ret = gpio_pin_toggle_dt(&led);
		if (ret < 0) {
			return 0;
		}

		led_state = !led_state;
		printf("LED state: %s\n", led_state ? "ON" : "OFF");
		k_msleep(SLEEP_TIME_MS);
	}
	return 0;
}

这个任务就是使用了外设led(gpio输出),串口(输出调试信息)两个外设实现的。
要想使用自己对应或指定的外设就配置,对应app.overlay文件如:

/ {
	chosen {
		zephyr,console = &usart1;
		zephyr,shell-uart = &usart1;
	};

	leds: leds {
		compatible = "gpio-leds";
		green_led: led_0 {
			gpios = <&gpiog 7 GPIO_ACTIVE_HIGH>;
			label = "User LD1";
		};
	};
	aliases {
		led0 = &green_led;
	};
}
&gpiog {
	   status = "okay";
};
&usart1 {
	pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

对应的prj.conf

CONFIG_GPIO=y
CONFIG_SHELL=y
CONFIG_UART_SHELL=y   

在my_file_project下执行
west build -p auto -b nucleo_h723zg //仅仅对修改的地方进行编译,耗时短
west build -p always -b nucleo_h723zg //全部重新编译,耗时久
成功就输出类似如下信息。
在这里插入图片描述

后面时硬件板子的型号,本质没差。
west flash 烧写,
或使用
在这里插入图片描述
烧写编译好的文件。
文件路径如下:
在这里插入图片描述
到此基本上就算是可以使用zephyr了。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐