草庐IT

2023年电赛小练习,利用stm32f407,hal库开发实现AD9854模块输出以及扫频

信号源在扫频仪、阻抗分析仪中都有应用。前面的实验通过单片机的DAC( DMA控制)或FPGA的ROMIP核实现了正弦波信号的产生。为了得到频率高、幅度平坦的信号源,现在通过集成的DDS模块AD9854产生任意频率的正弦波信号。1、训练任务:  在学习DDS原理的基础上,以STM32或FPGA为核心,辅以AD9854模块、矩阵键盘、TFT显示屏构成一个多功能的DDS信号源。实现以下功能。(1)两路正交信号输出模式时(即输出的四路正弦波信号相位相差90度),信号频率最大达到50MHz,频率可通过按键自定义设置。进一步不断增大输出信号的频率,测试输出信号幅度的平坦度,用excel表格做好记录。注意阻

【STM32】HAL库在4针脚0.96寸OLED屏上的移植---硬件IIC(一)

目录一、IIC背景和接线1.1什么是IIC1.2如何接线二、STM32CubeMX部分2.1配置时钟2.2配置IIC2.3工程生成三、MDK5部分3.1移植OLED文件3.2修改main函数效果如图前期准备:STM32CubeMXSTM32C8T6核心板IDEKeil(MDK-ARM)杜邦线×40.96寸OLED屏(4针脚)一、IIC背景和接线1.1什么是IICIIC(Inter-IntegratedCircuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。IIC总线是非常常见的数据总线,仅仅使用两条线就能完成多机通讯,一条SCL时钟线,另外

STM32 HAL 库 串口 函数HAL_UART_Transmit的BUG问题 及解决方法

近期在开发图传项目的时候,由于需要发送的数据量及其庞大,因此在处理的时候,发现STM32HAL库的串口函数,在处理海量数据的时候,存在bug,导致不能将指定数量的数据全部发送出去。 例如,我以200个字节为一个数据包,使用HAL_UART_Transmit函数,通过串口发送。那么,在发送几千个数据包后,会出现单个数据包发送不完整的情况(200个字节一个包,实际上可能只发送了60个字节出去,就没有任何征兆的提前结束了,并开始发送下个数据包)。导致图像数据丢失。 因此,在需要使用串口发送大量数据的时候,建议不要使用HAL库的函数,而是直接对寄存器操作。这里以STM32H7为例,(因为H7将DR寄存

基于HAL库的串口通信

首先对STM32MX进行配置,先开启外部时钟。配置时钟,具体多少M可以按自己喜欢配置(可以直接配置HCLK回车就行,没有标红就说明可以); 开启USART,波特率,IO口啥的默认就行也可以自己修改; 很重要一点,一定要开启接收中断,不然不能接收,我这里把DMA中断也开了,感觉DMA好用一点。 这里添加DMA中断就行ADD;改一下输出配置; 生产keil代码; 先定义一下参数 uint8_taRxBuffer[1]; //接收中断缓冲 uint8_tUart1_RxBuff[256]={0}; //接收缓冲 uint8_tUart1_Rx_Cnt=0; //接收缓冲计数 uint8_tU

STM32 HAL库函数——HAL_UART_RxCpltCallback()详解

HAL_UART_RxCpltCallback函数他是谁,他和谁有关功能用法每收到一个字符,就自动调用一次??示例----接收未知长度的字符他是谁,他和谁有关HAL_UART_RxCpltCallback是一个回调函数,用于在使用HAL库进行串口接收时处理接收完成事件。当使用HAL_UART_Receive_IT函数启动串口接收并且接收到指定数量的数据后,HAL库会自动调用HAL_UART_RxCpltCallback函数。回调函数是一种特殊的函数,它在特定事件发生时由系统或库调用,而不是由程序显式调用。在这种情况下,当串口接收完成时,HAL库会自动调用HAL_UART_RxCpltCallb

STM32f1之L298N电机驱动+PWM调速(附主代码)

前言今天这里主要是讲一下L298N电机驱动和PWM调速,之后再进行一番实际操作,那么废话不多说,直接进入主题。一、L298N电机驱动主要介绍主要I/O口使能端ENA和ENB,控制输入端INA、INB、INC、IND,马达输出口OUT1、OUT2、OUT3、OUT4,5V输出(可以不接),还有一个板载5V电压,具体如下图所示:  二、控制实现功能对于L298N模块,直接给12V输入,接上地,就可以给整个模块供电了,之后就是通过控制单片机(这里用的是STM32f1)给4个输入端(INA、INB、INC、IND)控制输入高低电平了注意:ENA和ENB一般情况下会有两个跳线帽连着,这是直接连上高电平,

STM32_HAL库串口接收相关函数分析

STM32_HAL库串口接收相关函数分析:串口接收的程序整体分为三个部分:初始化部分,开启中断部分,中断函数部分:初始化部分:该部分主要完成相关引脚的初始化,串口的初始化(设置波特率,校验位,字长等),为了逻辑清晰,把初始化相关代码放在本文的最后。开启中断部分:调用HAL_UART_Receive_IT函数,开启中断,这个函数原型如下:HAL_StatusTypeDefHAL_UART_Receive_IT(UART_HandleTypeDef*huart,uint8_t*pData,uint16_tSize)第一个参数是串口句柄,第二个参数指向自定义的接收缓冲数组,第三个参数很重要,它的值被

【AUTOSAR】RH850(F1KM) MCU PWM配置(MCAL)

前言在嵌入式项目中,我们经常需要使用到PWM信号。本文将基于汽车电子AUTOSAR架构下的软件开发方式。以RH850为例进行说明,介绍如何查阅芯片参考文档,并结合项目原理图,使用Davinci工具配置MCALPWM模块,输出PWM波形。仅供大家学习参考。其他MCU的配置方法类似,需要找到硬件原理图的端口号,MCU的PWM输出外设模块(不同的MCU的外设模块不一样),时钟树(时钟源),分频系数,中断等情况。TAUB时钟当前项目使用TAUB时钟搭建PWM波形。TAUB支持的通道数。TAUB时钟源TAUB属于C_ISO_PERI2(ClockDomain),Clockname为CKSCLK_IPER

STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)

1.总体逻辑按下STM32F4的KEY0按键,通过外部中断的方式对按键进行检测,然后进行一次固定点数的DMAADC采集,采集完成后在DMA的中断发送采集到的数据,然后清空数据区准备下一次的按键中断。电脑接受到串口数据后对数据进行简单处理和傅里叶变化,然后实时显示在电脑上。开发板:正点原子探索者STM32F407ZG2.STM32源工程文件可以拿着正点原子的官方例程的单通道ADC采集(DMA读取)实验进行修改这里只展示部分重要代码2.1外部中断处理函数打开exti.c文件,修改为以下的代码。删掉了冗余的代码,在KEY0按下后的逻辑中加入了adc_dma_enable(ADC_DMA_BUF_SI

8路灰度传感器与stm32f1

目录1.连接2.adc配置3.主函数1.连接2.adc配置#include"adc.h"#include"delay.h" //初始化ADCvoidAdc_Init(void){ /*定义两个初始化要用的结构体,下面给每个结构体成员赋值*/ ADC_InitTypeDefADC_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; /* 使能GPIOA和ADC1通道时钟 注意:除了RCC_APB2PeriphClockCmd还有RCC_APB1PeriphClockCmd,那么该如何选择?APB2:高速时钟,最高72MHz,主要负责AD输入,