STM32 기반 수중램프의 직렬통신 실험

목차

1. 실험 도구

2. STM32는 HAL 라이브러리를 기반으로 LED 점멸을 구현합니다.

1. CubeMXGPIO 구성은 다음과 같습니다.

2. 유수 램프 프로그램

3. 컴파일 및 구현

3. STM32 직렬 통신 - 레지스터 기반

1. 하드웨어 연결

 2. 시리얼 통신 프로그램

 3. 직렬 포트 도우미 설정 

4. 컴파일 및 구현 

4. 요약


1. 실험 도구

   1. STM32F103C8T6 최소 시스템 보드

   2. USB to TTL 모듈 

   3. 여러 LED

   4. 여러 DuPont 라인

   5. KEIL5 및 STM32CubeMX 소프트웨어

2. STM32는 HAL 라이브러리를 기반으로 LED 점멸을 구현합니다.

1. CubeMXGPIO 구성은 다음과 같습니다.

 · 해당 칩 모델에 대해 Stm32f103c8t6 선택

 해당 클럭 및 I / O 포트 구성은 다음과 같으며, GPIOA1, GPIOA5 및 GPIOB9에 해당합니다.

CubeMX 주변 장치 클록 구성 프로세스 에 대한 자세한 내용은 다음 링크를 참조하십시오. 

STM32CubeMX 초기화는 HAL 라이브러리를 사용하여 물 램프를 실현합니다.

2. 유수 램프 프로그램

· 주요 절차는 다음과 같습니다.

	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);			//PA1亮
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);		//PA5灭
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);		//PB9灭
	HAL_Delay(1000);											//延时1000
	  
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);		//PA1灭
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);			//PB9亮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);		//PB9灭
	HAL_Delay(1000);											//延时1000
	  
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);		//PA1灭
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);		//PB9灭
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);			//PB9亮
	HAL_Delay(1000);											//延时1000	

· 프로그램 주요 기능 분석 

① HAL_GPIO_WritePin()

해당 핀의 하이 레벨과 로우 레벨을 설정하는 데 사용되며, 첫 번째 파라미터는 IO 포트 그룹을 선택하고, 두 번째 파라미터는 핀 포트를 선택하며, 세 번째 파라미터는 핀의 하이 레벨과 로우 레벨을 설정합니다——GPIO_PIN_SET( 높은 수준), GPIO_PIN_RESET(낮은 수준)

② HAL_Delay() 

지연 기능 - 다음 변수는 지연 시간이며 단위는 ms입니다.

3. Keil 시뮬레이션 로직 분석기 파형 관찰

GPIOA_1 , GPIOA_5, GPIOB_9 파형은 다음과 같이 관찰됩니다.

시뮬레이션 파형은 실제 GPIO 출력의 레벨 변환과 일치합니다  .

4. 컴파일 및 구현

· 효과는 다음과 같다

플래시_LED

3. STM32 직렬 통신 - 레지스터 기반

1. 하드웨어 연결

STM32F103 최소 시스템 보드의 TX(PA9) 및 RX(PA10) 핀을 각각 USB의 RX 및 TX 핀을 TTL에 연결합니다.

 2. 시리얼 통신 프로그램

· 프로그램 코드는 다음과 같다

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

//----------------APB2时钟使能寄存器-----------------//
#define RCC_APB2ENR		*((unsigned volatile int*)0x40021018)
#define RCC_APB2RSTR	*((unsigned volatile int*)0x4002100C)		//外设复位寄存器
	
#define GPIOA_CRH		*((unsigned volatile int*)0x40010804)		//GPIOA配置寄存器
#define GPIOA_ODR		*((unsigned volatile int*)0x4001080C)		//GPIOA输出端口配置寄存器	

#define USART_SR	    *((unsigned volatile int*)0x40013800)		//串口状态寄存器
#define USART_DR		*((unsigned volatile int*)0x40013804)		//数据寄存器
#define USART_BRR		*((unsigned volatile int*)0x40013808)		//波特比率寄存器
#define USART_CR1		*((unsigned volatile int*)0x4001380C)		//usart1控制寄存器


uint8_t Tx_Buf[]="hello world!";				//定义串口发送数据缓冲区

int main()
{
	//系统时钟配置
	Stm32_Clock_Init(9);			//PLL倍频器为9设置系统时钟为72M	
	//延时函数初始化
	delay_init(72);					//延时函数初始化为频率72M的时钟
	//串口初始化
	uart_init(72,115200);			//串口初始化位时钟为72M,baud率为115200
	
	while(1)
	{
		/************串口发送实验**************************/
		int i=0;
		for(;i<sizeof(Tx_Buf);i++)				//发送数据
			{
				USART_DR=Tx_Buf[i];
				while((USART_SR&0x40)==0);		//等待一个字母发送完毕
			}
		delay_ms(1000);			//延时100ms				
	}

}

· 프로그램 주요 기능 분석 

① 위의 매크로는 UART 해당 구성 레지스터와 GPIO 구성 레지스터를 정의합니다.

② Stm32_Clock_Init(9): 시스템 클록 초기화 구성, 해당 PLL 주파수 체배 계수 설정

③ delay_init(72): 지연 함수 초기화, 지연 함수 클록 주파수 설정

④ uart_init(72,115200); 통신 직렬 포트 초기화 기능, 클록 주파수 및 전송 속도 설정

⑤ USART_DR UART 데이터 레지스터, 전송할 데이터를 이 레지스터에 넣고 전송 대기

⑥ USART_SR UART 상태 레지스터, 레지스터의 해당 플래그 비트를 확인하여 데이터 전송 여부를 판단할 수 있습니다.

 3. 직렬 포트 도우미 설정 

직렬 포트 도우미를 열고(블로거는 punctual atom의 XCOM 사용) 먼저 해당 COM 포트를 선택합니다(CH430의 해당 COM을 확인하여 장치 관리자에 따라 설정). 그런 다음 데이터 수신 전송 속도를 구성합니다( 프로그램에서와 동일해야 함) 직렬 포트 구성의 전송 속도는 일관적입니다. 그렇지 않으면 수신한 데이터가 왜곡되거나 수신되지 않을 수 있습니다.) 설정이 완료된 후 직렬 포트를 열 수 있습니다. uart 실험 시작

4. 컴파일 및 구현 

· 실험 결과는 다음과 같다

USART 통신

4. 요약

Stm32의 학습은 정말 책과 선생님 의 설명에만 머물 수 없습니다. 스스로 더 많은 실험을 해야 전체 개발 과정을 경험할 수 있으며 선생님의 설명과 책에만 머물 수는 없습니다. .

이번 실험을 통해 레지스터와 HAL 라이브러리의 서로 다른 두 가지 개발 방식을 경험했습니다. 레지스터의 작동 원리를 숙지 하고

추천

출처blog.csdn.net/qq_52791446/article/details/127314157