你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
HAL_UART_Receive_DMA 和 HAL_UART_Transmit_DMA 怎么用 在线等呢.
[复制链接]
Nick20150702
提问时间:2015-7-2 12:18 /
阅读主题, 点击返回1楼
赞
0
收藏
1
评论
30
分享
发布时间:2015-7-2 12:18
请先
登录
后回复
30个回答
jqwx2010
回答时间:2016-12-27 02:04:51
a4a.1 32b0c
据我实测:
使用串口DMA接收数据,即使不使用“接收一半数据中断”,在接收一半数据后,也会触发相应的DMA通道中断句柄,全部数据接收完成后,又触发相应的DMA通道中断句柄,通过DMA通道中断句柄,而DMA中断句柄最终还是会调用串口接收中断回调函数,所以最终接收的数据可以通过重载串口接收中断回调函数来处理
在stm32f1xx_it.c中的与串口接收相关的DMA通道中断句柄函数,注意这个中断句柄与接收或发送相对应,也就是说发送和接收是2个不同DMA通道中断句柄。比如使用 HAL_UART_Receive_DMA(&huart1,(uint8_t *)aRxMessage,6) 在下面的代码中,我接收到3个数据就会触发printf("here DMA1_Channel5_IRQHandler") 接收到6个数据,又触发printf("here DMA1_Channel5_IRQHandler"),同时这接收到的6个数据,通过重载串口接收中断回调函数来处理
//stm32f1xx_it.c中的DMA中断句柄
void DMA1_Channel5_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
/* USER CODE END DMA1_Channel5_IRQn 0 */
printf("here DMA1_Channel5_IRQHandler");
HAL_DMA_IRQHandler(&hdma_usart1_rx);//串口接收DMA通道
/* USER CODE BEGIN DMA1_Channel5_IRQn 1 */
/* USER CODE END DMA1_Channel5_IRQn 1 */
}
复制代码
//在main.c中通过重载来处理DMA接收的数据
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
//printf("%c",aRxBuffer[ss]);
/* NOTE : This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback can be implemented in the user file
*/
for (i=0;i<100;i++){
printf("%c",aRxMessage[i]);
}
HAL_UART_Receive_DMA(&huart1,(uint8_t *)aRxMessage,10);
//HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 10,0xFFFF);
}
/* USER CODE END 4 */
复制代码
赞
0
评论
回复
支持
反对
1
2
3
/ 3 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
使用串口DMA接收数据,即使不使用“接收一半数据中断”,在接收一半数据后,也会触发相应的DMA通道中断句柄,全部数据接收完成后,又触发相应的DMA通道中断句柄,通过DMA通道中断句柄,而DMA中断句柄最终还是会调用串口接收中断回调函数,所以最终接收的数据可以通过重载串口接收中断回调函数来处理
在stm32f1xx_it.c中的与串口接收相关的DMA通道中断句柄函数,注意这个中断句柄与接收或发送相对应,也就是说发送和接收是2个不同DMA通道中断句柄。比如使用 HAL_UART_Receive_DMA(&huart1,(uint8_t *)aRxMessage,6) 在下面的代码中,我接收到3个数据就会触发printf("here DMA1_Channel5_IRQHandler") 接收到6个数据,又触发printf("here DMA1_Channel5_IRQHandler"),同时这接收到的6个数据,通过重载串口接收中断回调函数来处理