当前位置:网站首页>Learning record: USART serial communication
Learning record: USART serial communication
2022-07-06 15:33:00 【Bitter tea seeds】
Catalog
1. Introduction to serial communication protocol
3.printf Support code for function
1. Introduction to serial communication protocol
For communication protocols , We also understand it in a hierarchical way , The most basic thing is to divide it into Physical layer and protocol layer . The physical layer specifies that the communication system has mechanical 、 The characteristics of the electronic functional part , Ensure the transmission of raw data on physical media . The protocol layer mainly specifies the communication logic , Unify the data packaging of both sender and receiver 、 Unpacking standard .
1.1 The physical layer
It's about understanding :RS-232 standard ,RS-232 The standard mainly stipulates The signal Use of 、 Communication interface and signal level standard .
Use RS-232 Common among standard serial port devices Communication structure , As shown in the figure below
In the communication mode above , Two communication devices “DB9 Interface ” The connection between them is established through the serial signal line , Used in serial port signal line “RS-232 standard ” Transmitting data signals . because RS-232 The level standard signal cannot be directly recognized by the controller , So these signals go through a “ Level conversion chip ” Convert to something the controller can recognize “TTL standard ” The level of the signal , To communicate .
1.2 Level standard
According to the level standard used in communication , Serial communication can be divided into TTL Standards and RS-232 standard ;
It is often used in common electronic circuits TTL The level standard of , ideally , Use 5V Represents binary logic 1, Use 0V To express logic 0; In order to increase the ability of long-distance transmission and anti-interference of serial communication ,RS-232 Use -15V To express logic 1, +15V To express logic 0. Use RS232 And TTL Level calibration represents the comparison of the same signal , As shown in the figure below .
Because controllers generally use TTL Level standard , So we often use MA3232 Chip pair TTL And RS-232 Level signals are converted to each other .
2. Protocol layer
The data packet of serial communication is sent by the sending device through its own TXD Interface to the receiving device RXD Interface . In the protocol layer of serial communication , Specifies the content of the packet , It starts from the beginning 、 Subject data 、 Check bit and stop bit , The data packet format of both communication parties shall be consistent in order to send and receive data normally ,
3.printf Support code for function
// Add the following code , Support printf function , You don't need to choose use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
// Support functions required by the standard library
struct __FILE
{
int handle;
};
FILE __stdout;
// Definition _sys_exit() To avoid using semi host mode
void _sys_exit(int x)
{
x = x;
}
// redefinition fputc function
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);// Cycle to send , Until it's sent
USART1->DR = (u8) ch;
return ch;
}
#endif
4.usart.h Program
Define the maximum number of bytes received 200;
#define USART_REC_LEN 200
Receive buffer , Maximum USART_REC_LEN Bytes . The last byte is a newline character ;
extern u8 USART_RX_BUF[USART_REC_LEN];
Receive status flag ;
extern u16 USART_RX_STA;
Can make (1)/ prohibit (0) A serial port 1 receive ;
#define EN_USART1_RX 1
usart.c and usart.h Function program in column Stm32 In the study notes Blog 《 Learning record : Serial communication and solutions to errors encountered 》 Yes .
5.main.c The main function
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
int main(void)
{
u16 t;
u16 len;
u16 times=0;
delay_init(); // Delay function initialization
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // Set up NVIC Interrupt grouping 2:2 Bit preemption priority ,2 Bit response priority
uart_init(115200); // The serial port is initialized to 115200
LED_Init(); //LED Port initialization
KEY_Init(); // Initialize the hardware interface connected with the key
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;// The length of data received this time
printf("\r\n The message you sent is :\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);// Serial port 1 send data
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);// Wait for the end of sending
}
printf("\r\n\r\n");// Insert newline
USART_RX_STA=0;
}
else
{
times++;
if(times%5000==0)
{
printf("\r\n Focus on Bitter tea seeds\r\n");
printf("USART— A serial port communication \r\n\r\n");
}
if(times%200==0)printf(" Please input data , End with enter \n");
if(times%30==0)LED0=!LED0;// flashing LED, Indicates that the system is running .
delay_ms(10);
}
}
}
First, determine the global variables USART_RX_STA Whether the highest position of is 1, If 1 Words , Then it means that the previous data reception has been completed , The next step is to send our customized receive buffer data to the serial port .
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
The above code is after we send a byte , To check whether this data has been sent .
6. Experimental phenomena
边栏推荐
- Learning record: Tim - capacitive key detection
- Iterators and generators
- ucorelab4
- Mysql database (I)
- UCORE LaB6 scheduler experiment report
- [200 opencv routines] 98 Statistical sorting filter
- The maximum number of words in the sentence of leetcode simple question
- LeetCode#204. Count prime
- 線程及線程池
- In Oracle, start with connect by prior recursive query is used to query multi-level subordinate employees.
猜你喜欢
自动化测试你必须要弄懂的问题,精品总结
Your wechat nickname may be betraying you
Learning record: Tim - capacitive key detection
Want to change jobs? Do you know the seven skills you need to master in the interview software test
LeetCode#237. Delete nodes in the linked list
Do you know the performance testing terms to be asked in the software testing interview?
软件测试有哪些常用的SQL语句?
MATLAB实例:阶跃函数的两种表达方式
软件测试面试回答技巧
Interview answering skills for software testing
随机推荐
Unpleasant error typeerror: cannot perform 'ROR_‘ with a dtyped [float64] array and scalar of type [bool]
软件测试行业的未来趋势及规划
ucore lab5
Stm32 dossiers d'apprentissage: saisie des applications
Research Report on medical toilet industry - market status analysis and development prospect forecast
学习记录:使用STM32F1看门狗
ucore lab7
MATLAB实例:阶跃函数的两种表达方式
ArrayList set
STM32學習記錄:輸入捕獲應用
Collection集合与Map集合
Learning record: Tim - capacitive key detection
ucore lab7
Do you know the performance testing terms to be asked in the software testing interview?
Eslint--- error: newline required at end of file but not found (EOL last) solution
ucore lab5
ucorelab4
Brief introduction to libevent
Portapack application development tutorial (XVII) nRF24L01 launch B
Collection collection and map collection