求助,HAL库函数 串口外部中断库函数接收,急急急,加入悬赏

求助,HAL库函数 串口中断接收,急急急,加入悬赏 _ 鞍山生活问答网
求助,HAL库函数 串口中断接收,急急急,加入悬赏
开发者只需要在回调函数中实现特定的功能即可,回掉函数是暴露给开发者的接口函数其实ST是把中断处理的细节给封装了起来,但是对于用惯了标准库的我来说。这样的好处是简化了开发过程(理论上是这样的,还是有些不适应
方法1 如何在64位操作系统上安装sql2000 要在 64 位操作系统上安装此应用程序,请使用以下步骤: 在sql2000安装盘CD1中打开STANDARD文件夹,按照以下步骤 安装 SQL Server 2000: 双击“x86\setup”子文件夹中的 setupsql.exe。 安装 SQL Server
方法1 如何在64位操作系统上安装sql2000 要在 64 位操作系统上安装此应用程序,请使用以下步骤: 在sql2000安装盘CD1中打开STANDARD文件夹,按照以下步骤 安装 SQL Server 2000: 双击“x86\setup”子文件夹中的 setupsql.exe。 安装 SQL Server 2...
1、学习开发环境使用 2、深入系统的学习编程 3、学习硬件设计过程 实践是第一位的!买一个开发板有利于快速入手,而优秀的开发板的设计对你的提高具有重要的意义。
HAL_UART_Receive_IT 不要放在HAL_UART_TxCpltCallback 里, 放在主函数里,在初始化的时候调用, 总之要在HAL_UART_Transmit_IT之前。
并不是上位机太快,而是你把程序写慢了。 两个问题: 1)接收中断函数里怎么能有发送标志位的判断? 这句去掉:while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) 2)你这个串口用的方式不对,你每接收一个数据需要进一次中断,实际...
1、学习开发环境使用 2、深入系统的学习编程 3、学习硬件设计过程 实践是第一位的!买一个开发板有利于快速入手,而优秀的开发板的设计对你的提高具有重要的意义。
其实ST是把中断处理的细节给封装了起来,回掉函数是暴露给开发者的接口函数,开发者只需要在回调函数中实现特定的功能即可。这样的好处是简化了开发过程(理论上是这样的,但是对于用惯了标准库的我来说,还是有些不适应,感觉都被束缚了
typedefstructlista{structlista*}voidinsert(list*h);voiddel(list*h);intmain(){list*head=(list*)malloc(sizeof(list));head-&next=NULL;while(1){
UART1_Init((u32)19200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);//19200,8位,无校验 UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);//开启接收中断 UART1_ITConfig(UART...
返回主页:
本文网址:http://www.nvcike.cn/view-.html求助!HAL库函数 串口中断接收!急急急!加入悬赏 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 16584|回复: 40
求助!HAL库函数 串口中断接收!急急急!加入悬赏
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
首先介绍一下实验环境:单片机为stm32f415
调试器:st-link
硬件初始化:
*串口波特率为614400
*采用定时器每隔500us触发一次串口中断发送
*发送完成后进入中断接收模式
定时器中断回调函数如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
& && &&&if(htim==&htim14)
& && && && && & GYRO_Handle.cmd_GYRO=GYRO_CMD;& && && && && &
& && && && && & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);& && && && && && && && && && && & 使能发送
& && && && && & HAL_UART_Transmit_IT(&huart3, &GYRO_Handle.cmd_GYRO, 1);& && && && && && && && & 开启中断发送,然后进入发送模式
发送完成后进入发送中断完成回调函数:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
& && &&&if(huart==&huart3)
& && && && && & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);& && && && && && && && && && &&&使能接收
& && && && && & HAL_UART_Receive_IT(&huart3, GYRO_Handle.frame_GYRO, 7);& && && && && && && && &开启中断接收,然后进入接收模式
接收中断完成回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
& && &&&if(huart==&huart3)
& && && && && &&&用户函数区域
实验结果:
发送没有问题,可成功发送。
接收只能收到第一个字节。
接收服务函数老是进入错误服务函数,错误号为数据溢出
已经分析两天了,还是没有找到问题,求大师分析。
根据现像,乱码一般是时钟配置问题。楼主检查下时钟配置。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
我把原有中断服务函数的标志位处理函数的顺序改了一下。
现在可以收到数据了,但是第一个数据经常出现跟帧 ...
根据现像,乱码一般是时钟配置问题。楼主检查下时钟配置。
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
HAL_UART_Receive_IT 不要放在HAL_UART_TxCpltCallback 里,放在主函数里,在初始化的时候调用,总之要在HAL_UART_Transmit_IT之前。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
HAL_UART_Receive_IT 不要放在HAL_UART_TxCpltCallback 里,放在主函数里,在初始化的时候调用,总之要在HA ...
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
& & & & if(htim==&htim14)
& & & & & & & & GYRO_Handle.cmd_GYRO=GYRO_CMD;& & & & & & & &
& & & & & & & & HAL_UART_Receive_IT(&huart3, GYRO_Handle.frame_GYRO, 7);& & & &
& & & & & & & & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);& & & &
& & & & & & & & HAL_UART_Transmit_IT(&huart3, &GYRO_Handle.cmd_GYRO, 1);& & & &
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
& & & & if(huart==&huart3)
& & & & & & & & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);& & & & & & & & & & & &
还是进入错误中断,无法进入接收完成中断
在线时间52 小时
该用户从未签到主题帖子精华
高级会员, 积分 571, 距离下一级还需 429 积分
波特率降低测试
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
波特率降低测试
9600木有问题!
在线时间52 小时
该用户从未签到主题帖子精华
高级会员, 积分 571, 距离下一级还需 429 积分
通信距离有多远?用max3232?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
本帖最后由 党国特派员 于
11:40 编辑
HAL_UART_Receive_IT 只需要调用一次。
还有就是你的接收函数里都干了些什么,会不会时间超长了。
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
如果 是还出现数据溢出的话,那你就用HAL_UART_Receive_DMA吧,最好是双缓冲的。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间254 小时
ST金币2028
该用户从未签到主题帖子精华
金牌会员, 积分 4211, 距离下一级还需 789 积分
用户函数区处理时间太长
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /1
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by求助!HAL库函数 串口中断接收!急急急!加入悬赏 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 16586|回复: 40
求助!HAL库函数 串口中断接收!急急急!加入悬赏
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
首先介绍一下实验环境:单片机为stm32f415
调试器:st-link
硬件初始化:
*串口波特率为614400
*采用定时器每隔500us触发一次串口中断发送
*发送完成后进入中断接收模式
定时器中断回调函数如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
& && &&&if(htim==&htim14)
& && && && && & GYRO_Handle.cmd_GYRO=GYRO_CMD;& && && && && &
& && && && && & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);& && && && && && && && && && && & 使能发送
& && && && && & HAL_UART_Transmit_IT(&huart3, &GYRO_Handle.cmd_GYRO, 1);& && && && && && && && & 开启中断发送,然后进入发送模式
发送完成后进入发送中断完成回调函数:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
& && &&&if(huart==&huart3)
& && && && && & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);& && && && && && && && && && &&&使能接收
& && && && && & HAL_UART_Receive_IT(&huart3, GYRO_Handle.frame_GYRO, 7);& && && && && && && && &开启中断接收,然后进入接收模式
接收中断完成回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
& && &&&if(huart==&huart3)
& && && && && &&&用户函数区域
实验结果:
发送没有问题,可成功发送。
接收只能收到第一个字节。
接收服务函数老是进入错误服务函数,错误号为数据溢出
已经分析两天了,还是没有找到问题,求大师分析。
根据现像,乱码一般是时钟配置问题。楼主检查下时钟配置。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
我把原有中断服务函数的标志位处理函数的顺序改了一下。
现在可以收到数据了,但是第一个数据经常出现跟帧 ...
根据现像,乱码一般是时钟配置问题。楼主检查下时钟配置。
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
HAL_UART_Receive_IT 不要放在HAL_UART_TxCpltCallback 里,放在主函数里,在初始化的时候调用,总之要在HAL_UART_Transmit_IT之前。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
HAL_UART_Receive_IT 不要放在HAL_UART_TxCpltCallback 里,放在主函数里,在初始化的时候调用,总之要在HA ...
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
& & & & if(htim==&htim14)
& & & & & & & & GYRO_Handle.cmd_GYRO=GYRO_CMD;& & & & & & & &
& & & & & & & & HAL_UART_Receive_IT(&huart3, GYRO_Handle.frame_GYRO, 7);& & & &
& & & & & & & & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);& & & &
& & & & & & & & HAL_UART_Transmit_IT(&huart3, &GYRO_Handle.cmd_GYRO, 1);& & & &
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
& & & & if(huart==&huart3)
& & & & & & & & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);& & & & & & & & & & & &
还是进入错误中断,无法进入接收完成中断
在线时间52 小时
该用户从未签到主题帖子精华
高级会员, 积分 571, 距离下一级还需 429 积分
波特率降低测试
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
波特率降低测试
9600木有问题!
在线时间52 小时
该用户从未签到主题帖子精华
高级会员, 积分 571, 距离下一级还需 429 积分
通信距离有多远?用max3232?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
本帖最后由 党国特派员 于
11:40 编辑
HAL_UART_Receive_IT 只需要调用一次。
还有就是你的接收函数里都干了些什么,会不会时间超长了。
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
如果 是还出现数据溢出的话,那你就用HAL_UART_Receive_DMA吧,最好是双缓冲的。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间254 小时
ST金币2028
该用户从未签到主题帖子精华
金牌会员, 积分 4211, 距离下一级还需 789 积分
用户函数区处理时间太长
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /1
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by求助!HAL库函数 串口中断接收!急急急!加入悬赏 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 16588|回复: 40
求助!HAL库函数 串口中断接收!急急急!加入悬赏
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
首先介绍一下实验环境:单片机为stm32f415
调试器:st-link
硬件初始化:
*串口波特率为614400
*采用定时器每隔500us触发一次串口中断发送
*发送完成后进入中断接收模式
定时器中断回调函数如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
& && &&&if(htim==&htim14)
& && && && && & GYRO_Handle.cmd_GYRO=GYRO_CMD;& && && && && &
& && && && && & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);& && && && && && && && && && && & 使能发送
& && && && && & HAL_UART_Transmit_IT(&huart3, &GYRO_Handle.cmd_GYRO, 1);& && && && && && && && & 开启中断发送,然后进入发送模式
发送完成后进入发送中断完成回调函数:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
& && &&&if(huart==&huart3)
& && && && && & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);& && && && && && && && && && &&&使能接收
& && && && && & HAL_UART_Receive_IT(&huart3, GYRO_Handle.frame_GYRO, 7);& && && && && && && && &开启中断接收,然后进入接收模式
接收中断完成回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
& && &&&if(huart==&huart3)
& && && && && &&&用户函数区域
实验结果:
发送没有问题,可成功发送。
接收只能收到第一个字节。
接收服务函数老是进入错误服务函数,错误号为数据溢出
已经分析两天了,还是没有找到问题,求大师分析。
根据现像,乱码一般是时钟配置问题。楼主检查下时钟配置。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
我把原有中断服务函数的标志位处理函数的顺序改了一下。
现在可以收到数据了,但是第一个数据经常出现跟帧 ...
根据现像,乱码一般是时钟配置问题。楼主检查下时钟配置。
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
HAL_UART_Receive_IT 不要放在HAL_UART_TxCpltCallback 里,放在主函数里,在初始化的时候调用,总之要在HAL_UART_Transmit_IT之前。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
HAL_UART_Receive_IT 不要放在HAL_UART_TxCpltCallback 里,放在主函数里,在初始化的时候调用,总之要在HA ...
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
& & & & if(htim==&htim14)
& & & & & & & & GYRO_Handle.cmd_GYRO=GYRO_CMD;& & & & & & & &
& & & & & & & & HAL_UART_Receive_IT(&huart3, GYRO_Handle.frame_GYRO, 7);& & & &
& & & & & & & & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);& & & &
& & & & & & & & HAL_UART_Transmit_IT(&huart3, &GYRO_Handle.cmd_GYRO, 1);& & & &
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
& & & & if(huart==&huart3)
& & & & & & & & HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);& & & & & & & & & & & &
还是进入错误中断,无法进入接收完成中断
在线时间52 小时
该用户从未签到主题帖子精华
高级会员, 积分 571, 距离下一级还需 429 积分
波特率降低测试
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间19 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
波特率降低测试
9600木有问题!
在线时间52 小时
该用户从未签到主题帖子精华
高级会员, 积分 571, 距离下一级还需 429 积分
通信距离有多远?用max3232?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
本帖最后由 党国特派员 于
11:40 编辑
HAL_UART_Receive_IT 只需要调用一次。
还有就是你的接收函数里都干了些什么,会不会时间超长了。
在线时间376 小时
ST金币6460
该用户从未签到主题帖子精华
如果 是还出现数据溢出的话,那你就用HAL_UART_Receive_DMA吧,最好是双缓冲的。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间254 小时
ST金币2028
该用户从未签到主题帖子精华
金牌会员, 积分 4211, 距离下一级还需 789 积分
用户函数区处理时间太长
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /1
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by求助,HAL库函数 串口中断接收,急急急,加入悬赏_百度知道
求助,HAL库函数 串口中断接收,急急急,加入悬赏
我有更好的答案
1、学习开发环境使用2、深入系统的学习编程3、学习硬件设计过程实践是第一位的!买一个开发板有利于快速入手,而优秀的开发板的设计对你的提高具有重要的意义。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 arduino 串口中断 的文章

 

随机推荐