欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

USART串口控制外设

程序员文章站 2022-07-06 12:18:25
...

#include “stm32f10x.h”
#include “LQ12864.h”
#include “adc.h”
#include <stdio.h>
#include “bsp_clkconfig.h”
#include “bsp_mcooutput.h”
#include “bsp_SysTick.h”
#include “usart.h”
void main_delay(u32 ms)
{
int i, j;
for(i = 0; i < ms; i++)
{
for(j = 0; j < 1000; j++)
{
}
}
}
//定义函数,串口初始化
void uart_config(){
//创建USART串口(USART1串口)类型的初始化结构体变量
USART_InitTypeDef USART_InitStructure;
//创建GPIO引脚配置结构体变量
GPIO_InitTypeDef GPIO_InitStructure;
//使能GPIOA组的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//参数1:RCC_APB2Periph_GPIOA是GPIOA组标示
//参数2: ENABLE使能时钟的状态
//使能GPIOA重映射功能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//参数1:RCC_APB2Periph_AFIO GPIO引脚复用标示
//参数2:使能状态ENABLE
//使能片上外设串口USART1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//参数1:RCC_APB2Periph_USART1 片上外设的标示
//参数2:使能状态ENABLE
//stm32 片上外设USART1 发送 引脚 TX -复用、重新映射-> GPIO PA9(模式是复用推挽)
//设置GPIO 引脚的模式(PA9模式)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//设置引脚号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
//设置引脚的工作的频率
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//初始化PA9引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);
//参数1:GPIO组标示
//参数2:引脚配置结构体变量
//stm32 片上外设USART1 接收 引脚 RX -复用、重新映射-> GPIO PA10(模式是浮空输入)
//设置GPIO浮空输入模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//设置引脚号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
//初始化PA10引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置串口
//设置串口波特率:9600位/秒
USART_InitStructure.USART_BaudRate = 9600;
//设置串口USART1数据包里面的数据位:8位
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
//设置数据发送完成数据停止位:1位
USART_InitStructure.USART_StopBits = USART_StopBits_1;
//设置校验:无,数据包小 无需校验USART_Parity_No
USART_InitStructure.USART_Parity = USART_Parity_No;
//设置硬件流控制:无控制USART_HardwareFlowControl_None
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None//设置串口的模式:输入模式、输出模式
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//初始化串口信息
USART_Init(USART1, &USART_InitStructure);
//参数1:串口的标示
//参数2:串口的配置信息
//使能串口
USART_Cmd(USART1, ENABLE);
//参数1:串口标示USART1
//参数2:使能串口
}
int main(void)
{
uint16_t val;
int i = 0 ;
char buf[100] = { 0 };
RCC_ClocksTypeDef RCC_Clocks; //时钟结构体
HSE_SetSysClock(RCC_PLLMul_2); //16Mhz,库函数默认多数为72MHZ。此处设置为16M,主要是因为发现72M时proteus仿真串口容易出现乱码。
delay_init() ;
LCD_Init() ;
Adc_Init();
//调用函数,串口初始化
uart_config();
//格式化输出内容到串口
printf(“input data : “);
//格式化输入函数到串口
scanf(”%s”, buf);
//输出输入的内容buf
printf(“get data : %s\r\n”, buf);
//\r:回车,光标到行首
//\n:换行,光标到下一行
while(1)
{
}
}
USART串口控制外设
#include “stm32f10x.h”
#include “LQ12864.h”
#include “adc.h”
#include <stdio.h>
#include “bsp_clkconfig.h”
#include “bsp_mcooutput.h”
#include “bsp_SysTick.h”
#include “usart.h”
void main_delay(u32 ms)
{
int i, j;
for(i = 0; i < ms; i++)
{
for(j = 0; j < 1000; j++)
{
;
}
}
}
void uart_config(){
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//GPIO_InitTypeDef init;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//init.GPIO_Mode = GPIO_Mode_Out_PP;
//init.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
//init.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_Init(GPIOA,&init);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

USART_InitStructure.USART_BaudRate = 9600;
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_Rx | USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);

//GPIO_SetBits(GPIOA,GPIO_Pin_1);
//GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
void fan_init(){
GPIO_InitTypeDef init;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	init.GPIO_Pin = GPIO_Pin_8;
	init.GPIO_Mode = GPIO_Mode_Out_PP;
	init.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &init);
	GPIO_SetBits(GPIOA, GPIO_Pin_8);

}
void buzzer_init(){
GPIO_InitTypeDef init;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
init.GPIO_Pin = GPIO_Pin_2;
init.GPIO_Mode = GPIO_Mode_Out_PP;
init.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &init);
GPIO_SetBits(GPIOA, GPIO_Pin_2);
}

void led_init(){
GPIO_InitTypeDef init;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	init.GPIO_Pin = GPIO_Pin_15;
	init.GPIO_Mode = GPIO_Mode_Out_PP;
	init.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &init);
	GPIO_SetBits(GPIOA, GPIO_Pin_15);

}
int main(void)
{
uint16_t val;
int i = 0 ;
char buf[100] = { 0 };
RCC_ClocksTypeDef RCC_Clocks;
HSE_SetSysClock(RCC_PLLMul_2);

delay_init()	;
LCD_Init() ; 	
Adc_Init();

uart_config();
fan_init();
led_init();
buzzer_init();

while(1)
{
printf("input data :");
scanf("%s",buf);
printf("get data : %s\r\n", buf);
	if(buf[0]=='1'){
	printf("len on\r\n");
		GPIO_ResetBits(GPIOA, GPIO_Pin_15);
	}
	if(buf[0]=='2'){
	printf("buzzer on\r\n");
		GPIO_ResetBits(GPIOA, GPIO_Pin_2);
	}
	if(buf[0]=='3'){
	printf("fan on\r\n");
		GPIO_ResetBits(GPIOA, GPIO_Pin_8);
	}
	
}

}
USART串口控制外设

相关标签: 仿真