1、配置相应的 GPIO 时钟、串口时钟、复用时钟
2、配置GPIO结构体
3、配置串口
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
int main(void)
{
LED_Init();//初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断等级
My_usart1();//串口初始化
while(1)
{
}
}
usart.c
#include "usart.h"
#include "led.h"
#include "beep.h"
void USART_SendByte(USART_TypeDef* USARTx, uint16_t Data)
{
USART_SendData( USARTx, Data);
while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}
void USART_SendStr(USART_TypeDef* USARTx, char* str)
{
uint16_t i=0;
while( *(str+i) != '\0' )
{
USART_SendByte( USART1, *(str+i) );
i++;
}
while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
}
void My_usart1(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//时钟使能 配置GPIOA、串口时钟、复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//时钟使能
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_OD; //GPIOA设置为复用推挽输出
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输出
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
//串口初始化
USART_InitStruct.USART_BaudRate=115200;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//
USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStruct.USART_Parity=USART_Parity_No;
USART_InitStruct.USART_StopBits=USART_StopBits_1;
USART_InitStruct.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStruct); //初始化串口
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断
USART_Cmd(USART1,ENABLE);//串口使能
//配置NVIC优先级结构体
NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruct);
}
//中断服务函数
void USART1_IRQHandler(void)
{
u16 res;
u16 ress;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
res=USART_ReceiveData(USART1);
USART_SendData(USART1,res);
if(res=='O')
{
LED0=1;
LED1=0;
USART_SendStr(USART1, "GreenLED is open");
}
else if(res=='C')
{
LED0=0;
LED1=1;
USART_SendStr(USART1, "RedLED is open");
}
else if(res=='B')
{
BEEP=1;
USART_SendStr(USART1, "RedLED is open");
}
}
}
usart.h
#include "stm32f10x.h"
#include <stdio.h>
void usart_init(void);
void My_usart1();
void USART_SendByte(USART_TypeDef* USARTx, uint16_t Data);
void USART_SendStr(USART_TypeDef* USARTx, char* str);
最后!!!
![](https://img-blog.csdnimg.cn/8b8147bee69f4e48af47ea21d4fcc3f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcml0aW5n44CB,size_20,color_FFFFFF,t_70,g_se,x_16)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)