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
接线:
STM32 | K210 |
---|---|
GND | GND |
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收的主要内容,如果未能解决你的问题,请参考以下文章