STM32 自定义UART数据格式(串口通信点亮LED实验)

起始位:0xaa告诉机器我们要开始传输数据了。

校验位:等于前几项数据位的相加。

结束位:结束传输。 

自定义UART数据格式:

1》CPU与CPU之间

2》外设与CPU之间

这里举例,利用串口调试助手发送一串数据,来控制4个LED灯。

数据格式

起始位 数据位1(灯的编号) 数据位2(点亮或者熄灭) 校验位 停止位
0xaa 0x01/02/03/04 0x00/01 数据位1+数据位2 0xff

例如

LED1点亮:aa 01 01 02 ff

LED2熄灭:aa 02 00 02 ff

  1. 先对串口中断和UART进行配置
    void Uart1_Configuration(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	USART_InitTypeDef USART_InitStructure;
    	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;   //TX
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;   //TX
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	USART_InitStructure.USART_BaudRate = 115200;
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    	USART_InitStructure.USART_StopBits = USART_StopBits_1;
    	USART_InitStructure.USART_Parity = USART_Parity_No;
    	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    	USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    	USART_Init(USART1, &USART_InitStructure);
    	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    	USART_Cmd(USART1, ENABLE);
    }
    
    void Uart1_NVIC_Init(void)
    {
    	NVIC_InitTypeDef NVIC_InitStructure;
    	
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);	
    	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_Init(&NVIC_InitStructure);
    }
  2. LED配置
    void Led_Configuration(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    }
  3.  UART中断
    void control_LED(unsigned int led_number, unsigned int status)
    {
    	GPIO_WriteBit(GPIOA, (uint16_t)1<<led_number, (BitAction)status);
    }
    void USART1_IRQHandler(void)
    {
    	static unsigned int i = 1;
    	static unsigned int flag = 0;
    	
    	static unsigned int arr[5] = {0, 0, 0, 0, 0};
    	
    	unsigned char ch;
    	while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
    	{
    		ch = USART_ReceiveData(USART1);
    		if(ch == 0xaa)
    		{
    			arr[0] = ch;
    			flag = 1;
    		}
    		if(ch != 0xaa && flag == 1)
    		{
    			arr[i++] = ch;
    			
    			if(i == 5)
    			{
    				flag = 0;
    				i = 1;
    				if(((arr[i]+arr[2]) == arr[3]) && arr[4] == 0xff)
    					control_LED(arr[1], arr[2]);
    			}
    		}
    	}			
    }

            static unsigned int arr[5] = {0, 0, 0, 0, 0};如果直接定义arr,这样每次进中断arr都会被初始化为0,所以我们必须在arr的定义类型前加static,把它变为全局变量。这样arr只会在第一次的时候初始化,随后每次进中断时arr都不会被重新赋值了。

                同理这里定义flag,用来判断,是否开始传输,是则为1,否则为0。

本实验接线:TTL:RX》A10,TX》A9,5V》5V,GND》GND,4个LED灯接在A1,A2,A3,A4,

相关推荐

  1. stm32 裸机led

    2023-12-08 19:54:02       69 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 19:54:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 19:54:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 19:54:02       87 阅读
  4. Python语言-面向对象

    2023-12-08 19:54:02       96 阅读

热门阅读

  1. 数据库函数大全(更新中)

    2023-12-08 19:54:02       53 阅读
  2. 解决Qt发送信号指定重载

    2023-12-08 19:54:02       58 阅读
  3. Glide系列-生命周期的监听

    2023-12-08 19:54:02       52 阅读
  4. macOS sandbox 获取用户路径文件夹

    2023-12-08 19:54:02       49 阅读
  5. final, finally, finalize的区别

    2023-12-08 19:54:02       49 阅读
  6. 算法训练营Day9(字符串,以后补KMP)

    2023-12-08 19:54:02       60 阅读
  7. 数据宝库:深入探讨数据隐私与安全的要义

    2023-12-08 19:54:02       51 阅读
  8. React中的页面跳转方式详解

    2023-12-08 19:54:02       51 阅读