...aaa 发表于 2015-11-16 20:33:05

发送的频率可能过快乐

magnbudie 发表于 2016-1-19 16:23:10

...aaa 发表于 2015-11-16 20:33
发送的频率可能过快乐

我算了下,100us,不是发送频率的问题

yyblike-263448 发表于 2016-1-26 14:37:33

本帖最后由 yyblike-263448 于 2016-1-26 14:48 编辑

magnbudie 发表于 2016-1-19 16:23
我算了下,100us,不是发送频率的问题
你确定是100us不是100ms?串口9600波特率差不多1ms一个数据。你说的串口中断臃肿,采用DMA方式正常我觉得不像,你可以把MCU的频率调到最高,串口的速率没有那么快,不可能处理不完那些东西。

0721de 发表于 2016-5-9 14:30:29

本帖最后由 0721de 于 2016-5-9 15:08 编辑

uint8_t uart_receive={0};
int main(void)
{

HAL_Init();

/* Configure the system clock */
SystemClock_Config();

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
MX_USART2_UART_Init();

/* USER CODE BEGIN 2 */
      HAL_UART_Receive_IT(&huart2,uart_receive, uart_len);//只这一句开接收中断,
                                                                                    //数组指针uart_receive
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
}
}

stm32f4xx_it.c中
void USART2_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart2);//只这两句就行
HAL_UART_Receive_IT(&huart2,uart_receive, 1);
}

实验表明,我上位机发1字节数据,就会进一次中断,虽然开接收中断函数里是一个数组指针,但HAL进中断是接一字节便进一次中断。

any012 发表于 2016-11-24 10:48:32

0721de 发表于 2016-5-9 14:30
uint8_t uart_receive={0};
int main(void)
{


为何是将HAL_UART_Receive_IT((&huart2,uart_receive, 1)函数放在了void USART2_IRQHandler(void)里?
我试了放在回调函数里,结果执行不了。感觉是接收没有满足调用回调函数的条件。

wjandsq 发表于 2016-12-4 10:36:48

放在一个任务里。收完数据或一秒调用一次。

zbber 发表于 2016-12-4 14:45:39

关注,感恩无私的分享与奉献 :)

any012 发表于 2016-12-13 10:21:29

我也倾向于认为是串口中断太臃肿了。
现在用的是STM32F103,串口波特率是9600,如果是再回调函数里再次开启串口中断接收的话,接收一个数据,然后就串口溢出错误了。

改成DMA方式的话,不知道该怎么处理,帧长度不固定。

yhyeefocus 发表于 2016-12-13 10:28:44

最近正在调试F042的USART,学习,看看

五哥1 发表于 2016-12-31 02:20:39

DMA,高速率,这个很搭
页: 1 2 3 [4] 5
查看完整版本: 求助!HAL库函数 串口中断接收!急急急!加入悬赏