STM32MP系列之使用CubeMX 进行DDR tuning

一.软件/二进制文件
1.STM32CubeMX,
2. u-boot-spl.stm32, uboot编译basic模式编译的SPL文件
3. STM32CubeProgrammer

二.过程。
1.设置拨码开关,启动配置B2B1B0=000即下载模式。
2. STM32CubeProgrammer 识别到stm32mp1。注意不要连接。
在这里插入图片描述

3.在STM32CubeMX |- DDR Test suit中,勾选SYSRAM Loading,选择文件u-boot-spl.stm32,选择调试串口号,点连接。连接成功后,在Target选项中 单击按钮load Register,界面如下。在这里插入图片描述

  1. 接下来开始DDR tuning,下图是DDR TUNING完成的截图。保存配置,Cubemx软件会生产设备树头文件dtsi。供设备树dts文件引用。
    在这里插入图片描述
  2. DDR TEST, 这里用默认的配置做一下测试,结果PASS. 也可以用上面步骤生产的DDR TUNING 配置文件编译成spl镜像,然后做DDR TEST。
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以!以下是一个简单的示例代码: ```c #include "stm32l4xx.h" #include <stdint.h> #define AD9851_CLK_PIN GPIO_PIN_5 #define AD9851_CLK_PORT GPIOA #define AD9851_FQ_UD_PIN GPIO_PIN_6 #define AD9851_FQ_UD_PORT GPIOA #define AD9851_DATA_PIN GPIO_PIN_7 #define AD9851_DATA_PORT GPIOA void AD9851_Write(uint8_t data); void AD9851_Init(void); int main(void) { AD9851_Init(); while(1) { // 通过串口等方式获取AD9851需要输出的频率值 uint32_t freq = 10000000; // 假设需要输出10MHz的正弦信号 uint32_t tuning_word = (uint32_t)((double)freq / 125.0 * 4294967296.0); // 产生的tuning_word是一个32位的值,用于设置AD9851的频率寄存器 AD9851_Write(0x00); // 将AD9851的控制字节清零 AD9851_Write((tuning_word >> 24) &amp; 0xFF); // 写入高位字节 AD9851_Write((tuning_word >> 16) &amp; 0xFF); AD9851_Write((tuning_word >> 8) &amp; 0xFF); AD9851_Write(tuning_word &amp; 0xFF); // 写入低位字节 AD9851_Write(0x2C); // 设置控制字节,使AD9851开始输出正弦波 } } void AD9851_Write(uint8_t data) { for(uint8_t i = 0; i < 8; i++) { if(data &amp; (1 << i)) HAL_GPIO_WritePin(AD9851_DATA_PORT, AD9851_DATA_PIN, GPIO_PIN_SET); else HAL_GPIO_WritePin(AD9851_DATA_PORT, AD9851_DATA_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(AD9851_CLK_PORT, AD9851_CLK_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(AD9851_CLK_PORT, AD9851_CLK_PIN, GPIO_PIN_RESET); } HAL_GPIO_WritePin(AD9851_FQ_UD_PORT, AD9851_FQ_UD_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(AD9851_FQ_UD_PORT, AD9851_FQ_UD_PIN, GPIO_PIN_RESET); } void AD9851_Init(void) { // 使能GPIOA时钟 RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; // 配置AD9851的控制引脚为输出模式 GPIOA->MODER &amp;= ~(GPIO_MODER_MODE5_Msk | GPIO_MODER_MODE6_Msk | GPIO_MODER_MODE7_Msk); GPIOA->MODER |= (GPIO_MODER_MODE5_0 | GPIO_MODER_MODE6_0 | GPIO_MODER_MODE7_0); // 配置AD9851的控制引脚为推挽输出 GPIOA->OTYPER &amp;= ~(GPIO_OTYPER_OT5_Msk | GPIO_OTYPER_OT6_Msk | GPIO_OTYPER_OT7_Msk); // 配置AD9851的控制引脚为高速输出 GPIOA->OSPEEDR |= (GPIO_OSPEEDR_OSPEED5_Msk | GPIO_OSPEEDR_OSPEED6_Msk | GPIO_OSPEEDR_OSPEED7_Msk); // 配置AD9851的控制引脚为无上下拉 GPIOA->PUPDR &amp;= ~(GPIO_PUPDR_PUPD5_Msk | GPIO_PUPDR_PUPD6_Msk | GPIO_PUPDR_PUPD7_Msk); // 初始化控制引脚状态 HAL_GPIO_WritePin(AD9851_CLK_PORT, AD9851_CLK_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(AD9851_FQ_UD_PORT, AD9851_FQ_UD_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(AD9851_DATA_PORT, AD9851_DATA_PIN, GPIO_PIN_RESET); } ``` 该代码使用STM32 HAL库,并假定了AD9851的控制引脚分别连接在GPIOA的5、6、7号引脚上。在`AD9851_Init()`函数中,我们初始化了这些引脚的状态,使它们处于正确的输出模式,并设置了一些输出的特性参数。在`AD9851_Write()`函数中,我们通过GPIO控制AD9851的串行接口,将需要写入的数据写入到AD9851的控制寄存器中。通过这种方式,我们可以控制AD9851输出不同的频率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值