stm32 HAL + CUBEMX +DMA

cubemx的配置方法我就不多说了

配置RCC时钟。。。设置sys。。。配置uart串口。。。初始化DMA。。。dma那里的rx要设置为circle,否则接收不到。。。然后generate code

主要是原子的教程里面是自己配置串口的,不是用cubemx,因此配置出来的结构体。。好像有人说是句柄,的名称不一样,如果照着原子的抄的话会找不到定义的结构体
如:__HAL_DMA_GET_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7

&UART1TxDMA_Handler这个一直找不到,然后又不知道cubemx配置出来的叫什么,因此很难弄。
答案是在dma.c文件里面,里面有

DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx;

定义了这两句,我们要做的是把原子给的例子里面的变量替换:

&UART1TxDMA_Handler ------  &hdma_usart1_Tx
&UART1RxDMA_Handler ------  &hdma_usart1_rx

在dma.h文件里面加上

extern DMA_HandleTypeDef hdma_usart1_tx;

即可

DMA的一些函数

获取是否在发送DMA数据,如果是则返回1

__HAL_DMA_GET_FLAG(&hdma_usart1_rx,DMA_FLAG_TC4)

获取DMA还剩多少数据没发

__HAL_DMA_GET_COUNTER(&hdma_usart1_tx);

发送完成后清除标志位(第一条代码的标志位清零)

__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_FLAG_TC4);

### 使用 STM32CubeMX 配置 HAL 库实现 CAN 通信 #### 初始化项目设置 通过STM32CubeMX软件打开新工程或已有工程,选择目标微控制器型号并确认其参数。对于CAN模块的支持,在线框图界面找到对应外设选项,并勾选启用CAN接口。 #### CAN 外设配置 进入PINOUT & CONFIGURATION标签页下定位到RCC时钟树部分调整APB1频率至适合CAN总线操作的速度;接着切换至Connectivity分类下的CAN组件开启该服务[^1]。此时可设定波特率(如500Kbps)、模式(正常/回环测试等),以及激活FIFO邮箱用于消息存储管理。 #### 中断与DMA资源分配 为了提高数据处理效率减少CPU占用,建议同时使能接收中断及发送完成通知机制以便及时响应事件触发动作。另外如果应用场合允许的话还可以考虑引入直接内存访问(DMA)技术加速批量传输过程不过这取决于具体应用场景需求而定[^2]。 #### 生成初始化代码框架 完成上述硬件层面的基础搭建之后点击GENERATE CODE按钮让工具自动生成必要的驱动程序文件夹结构连同预定义函数声明等内容供开发者进一步完善业务逻辑编码工作之用。 ```c // Example of initializing and using the CAN peripheral with HAL library. #include "main.h" CAN_HandleTypeDef hcan; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_CAN_Init(void); int main(void){ /* Reset of all peripherals, Initializes the Flash interface and Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_CAN_Init(); while (1){ // Application code here... } } /** * @brief This function is executed in case of error occurrence. */ void Error_Handler(void){ // User can add his own implementation to report the HAL error return state } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值