K210学习笔记 K210与STM32进行串口通信,K210发STM收

Posted 学工科的皮皮志^_^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K210学习笔记 K210与STM32进行串口通信,K210发STM收相关的知识,希望对你有一定的参考价值。

文章目录

前言

前面我们讲了STM32给K210发数据,大家可以看看这篇。
K210学习笔记(二) K210与STM32进行串口通信,K210收,STM32发
那么今天我们来讲一下K210给STM32发数据。

硬件平台:STM32F103ZET6正点原子用的也是正点原子的串口例程
,K210 M1N DOCK

软件平台:keil5 ,maixPython IDE

接线:

STM32K210
GNDGND
PA10(RXD)IO10(TXD)
PA9(TXD)IO9(RXD)

一、以/r/n为结尾

在stm32的串口通信代码中,程序要求发送的字符以回车换行结束(0x0d,0x0a),即\\r\\n。
那么我们看ASCII表就知道0x0d,0x0a是什么了。

\\r是回车,carriage return的意思,也就是cr,作用是返回到当前行的最前方。
\\n是换行,next line的意思,也就是nl,作用是跳到下一行的当前位置。
\\r\\n是回车+换行,很容易理解,它的作用是跳到下一行的开始位置。

STM32的串口中断服务函数也规定了必须以\\r\\n为结尾,否则程序不知道你什么时候发送结束。就会导致未知的错误。

二、K210端代码

K210端写的就很简单了。前面就是对串口,屏幕,摄像头进行初始化。然后每隔2S发1或发2.数据会以ASCII码的形式发送出来。

import sensor
import image
import lcd
import time
import utime
from machine import UART
from fpioa_manager import fm
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(9, fm.fpioa.UART1_RX, force=True)
uart = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)
clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames(30)
lcd.rotation(2)#LCD屏幕翻转,范围是0~3
sensor.set_hmirror(True)#摄像头镜像
first = '1\\r\\n'
two = '2\\r\\n'

while True:
    img = sensor.snapshot()#从摄像头获取图像
    uart.write(first)#发1
    utime.sleep_ms(2000)#延时2s
    uart.write(two)#发2
    utime.sleep_ms(2000)#延时2s
    lcd.display(img)#LCD显示图像

三、STM32端

STM32端,先说一下这个函数,就是使用printf的时候会调用这个函数,我们看到数据直接赋给了串口1的数据寄存器,那么我只用printf的是时候,那么就在串口1发出来。

3.1 main函数

主函数这里就是对时钟,串口,LED,LCD进行初始化。然后进入主循环,当接收完成之后
判断我USART_RX_BUF[0]是否是1或者2.因为我是1或2长度是1。USART_RX_BUF[0]是一个u8的数据类型。
当收到1时,LCD显示1,LED0亮,LED1灭。
当收到2时,LCD显示2,LED0灭,LED1亮。

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"

 int main(void)
 
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 	//串口初始化为115200
 	LED_Init();			     //LED端口初始化
	LCD_Init();
	POINT_COLOR=RED; 
  	while(1) 
		
  if(USART_RX_STA&0x8000)#接收完成
		    
    if(USART_RX_BUF[0]==0x31)
		
			LCD_ShowxNum(100,50,1,1,24,0);
            LED0=0;
            LED1=1;
		
	if(USART_RX_BUF[0]==0x32)
    
          LCD_ShowxNum(100,50,2,1,24,0);
          LED0=1;
          LED1=0;
    
    USART_RX_STA=0;
  
   
	 

 

主循环内则一直判断接收中断标志最高位有没有置1,置1表示有一帧数据来到,可以进行处理,处理内容为发送接收到的数据同时判断接收的第一位。
这个一定要加 USART_RX_STA=0; 否则标志位不回到0就不继续接收了。

四、测试结果

4.1当收到1时

4.2当收到2时

4.3 测试视频

总结

这就是这次的分享,希望能够帮助到大家。
参考博文:
\\n \\r \\n\\r \\r\\n回车还换行?有啥区别??
ASCII码对照表(包括十六进制、十进制和字符)
STM32CubeMX-串口中断实验

以上是关于K210学习笔记 K210与STM32进行串口通信,K210发STM收的主要内容,如果未能解决你的问题,请参考以下文章

K210学习笔记 K210与STM32串口通信相关

K210学习笔记 K210同时运行多个模型

K210学习笔记 K210同时运行多个模型

K210实战三-串口收发实验

K210实战三-串口收发实验

关于 k210 的 micropython 添加 ussl 模块,实现 https 访问支持的那些事。