打印
[应用相关]

STM32串口USART用法的进阶

[复制链接]
631|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小灵通2018|  楼主 | 2018-11-6 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基础发送:

uint8_t ch=0xAb;//1

uint8_t aRxBuffer[]="hello GKoSon\r\n";//2



HAL_UART_Transmit(&huart1, (uint8_t *)&ch,       1, 0xFFFF);//3

HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 10,0xFFFF);//4



此后不再讨论发送,毕竟这个不是重难点,接受才是。



基础接受:

//HAL_UART_Transmit(&huart1, (uint8_t *)&ch,       1, 0xFFFF);//可以发也可以不发
//HAL_UART_Transmit_IT(&huart1, (uint8_t *)aRxBuffer, sizeof(aRxBuffer));//可以发也可以不发
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 10);//必须有这句话,貌似用了里面的代码,使能了中断!


重写接受函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{
    HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 10,0xFFFF);
}

此时问题:1只能接受一次,以后中断不来了。2必须接受10个数才能进中断

优化如下:1每次接收以后再次开启接收中断,这样下次还可以进来啦 2修改为1个数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
          HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer,       1,0xFFFF);
          HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer,     1);
}


沙发
小灵通2018|  楼主 | 2018-11-6 16:32 | 只看该作者
DMA版本:

#define RECEIVELEN 100
uint8_t usartDMA_rxBuf[RECEIVELEN]; 

HAL_UART_Receive_DMA(&huart1, usartDMA_rxBuf, RECEIVELEN);  /*使能DMA接收*/

__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);  /*使能串口空闲中断*/

现在上电就没有提示了,可以自己写个发送玩玩

第一句话是绑定DMA,来源数USART1,目的是数组,定义好的。

第二句是打开空闲中断

it.c里面找到

void USART1_IRQHandler(void)

{
 UsartReceive_IDLE(&huart1);//自己添加一个函数,这就是中断,搬完以后,空闲中断 自己完成它

  HAL_UART_IRQHandler(&huart1);
}
void UsartReceive_IDLE(UART_HandleTypeDef *huart)  
{  
    uint32_t temp;  


    if((__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) != RESET))  
    {   
        __HAL_UART_CLEAR_IDLEFLAG(&huart1);  
        HAL_UART_DMAStop(&huart1);  
        temp = huart1.hdmarx->Instance->CNDTR;  
        rx_len =  RECEIVELEN - temp;    
        HAL_UART_Receive_DMA(&huart1,usartDMA_rxBuf,RECEIVELEN); 


HAL_UART_Transmit(&huart1, (uint8_t *)usartDMA_rxBuf, 10,0xFFFF);//4        收到就发挥了了       
    }  

}

使用特权

评论回复
板凳
小灵通2018|  楼主 | 2018-11-6 16:33 | 只看该作者
参考代码
https://pan.baidu.com/s/1Lon6RrSZH0NagypjbAeQRw

使用特权

评论回复
地板
八层楼| | 2018-11-7 10:08 | 只看该作者
非常感谢楼主分享呀

使用特权

评论回复
5
天灵灵地灵灵| | 2018-11-7 10:59 | 只看该作者
只会用,没好好研究。

使用特权

评论回复
6
heimaojingzhang| | 2018-11-7 12:14 | 只看该作者
由发送一个 改成发送一串

使用特权

评论回复
7
天灵灵地灵灵| | 2018-11-7 12:27 | 只看该作者
回调怎么重写?官方好像没解释。

使用特权

评论回复
8
wakayi| | 2018-11-7 13:02 | 只看该作者
这样的话简化了很多代码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

117

主题

1444

帖子

4

粉丝