发送的频率可能过快乐
...aaa 发表于 2015-11-16 20:33
发送的频率可能过快乐
我算了下,100us,不是发送频率的问题
本帖最后由 yyblike-263448 于 2016-1-26 14:48 编辑
magnbudie 发表于 2016-1-19 16:23
我算了下,100us,不是发送频率的问题
你确定是100us不是100ms?串口9600波特率差不多1ms一个数据。你说的串口中断臃肿,采用DMA方式正常我觉得不像,你可以把MCU的频率调到最高,串口的速率没有那么快,不可能处理不完那些东西。
本帖最后由 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进中断是接一字节便进一次中断。
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)里?
我试了放在回调函数里,结果执行不了。感觉是接收没有满足调用回调函数的条件。
放在一个任务里。收完数据或一秒调用一次。
关注,感恩无私的分享与奉献 :)
我也倾向于认为是串口中断太臃肿了。
现在用的是STM32F103,串口波特率是9600,如果是再回调函数里再次开启串口中断接收的话,接收一个数据,然后就串口溢出错误了。
改成DMA方式的话,不知道该怎么处理,帧长度不固定。
最近正在调试F042的USART,学习,看看
DMA,高速率,这个很搭