串口有关收发

串口发送

一、新建工程(略)
    配置好时钟,文件

串口有关收发_第1张图片

 

二、打开串口
    串口为异步串口,配置Baud Rate(比特率),Word Length(字长:数据位和校验位的长度之和)
    Parity(校验位,none为无校验,even为偶校验,odd为奇校验)
    Stop Bits(停止位)
    这样我们就完成了协议的配置,然后生成代码(如果自己的IO口不对,则需要在右边的芯片引脚上找到自己需要的IO口选择串口功能)

三、在mian.c文件的while中写入阻塞式发送的函数 HAL_UART_Transmit
 

   HAL_UART_Transmit(&huart1,(uint8_t*)"hello",5,0xFFFF);
    HAL_Delay(1000);

四、编译上传一下,打开串口调试软件并依照之前配置的相应参数进行修改,最后打开串口,这样就可以与串口进行通信了

串口有关收发_第2张图片

 

串口接收

一、要进行串口接收,首先我们需要一块内存空间来存储收到的数据,所以我们定义一个数组,然后使用一个接收的函数
  

 uint8_t buf[5];
    HAL_UART_Receive(&huart1,buf,3,0xFFFF);
    //因为我们要看到我们发送的数据正确与否,所以我们要把串口接收到的数据发送回来,于是我们加上
    HAL_UART_Transmit(&huart1,buf,3,0xFFFF);

二、编译上传代码,打开串口,发送三个字符,就可以看到串口发送回来的字符了

串口有关收发_第3张图片

 

中断方式进行串口收发

一、在cube中打开中断,调整优先级,生成代码

串口有关收发_第4张图片

 

二、在while中写入中断发送的函数

    HAL_UART_Transmit_IT(&huart1,(uint8_t*)"Hello",5);

三、在while中调用一个中断的接收函数,同样我们需要
 

   uint8_t buffer[5];
    HAL_UART_Receive_IT(&huart1,buffer,3);


    由于有可能接收到数据的时候定义的这个局部变量已经被销毁了,没有办法进行保存,
    所以我们需要把这个数组定义成全局变量

四、当接收完指定数量的字节之后,会调用这样的一个回调函数
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef*huart)
    这时我们就可以把发送中断的语句弄到while(1)之前
    这样后续的操作都是有串口中断进行的

五、上传代码看看效果

DMA处理串口收发

一、打开cube,添加DMA,生成代码

串口有关收发_第5张图片

 

二、我们万全可以把中断收发的函数换成DMA收发的函数

三、编译上传

你可能感兴趣的:(单片机,stm32,arm)