新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2019-8-17
- 在线时间
- 6 小时
|
1金钱
#include "stm32f10x.h"
/************************************************
ALIENTEK 精英STM32F103开发板实验
串口实验
************************************************/
void My_USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStrue;
USART_InitTypeDef USART_InitStrue;
NVIC_InitTypeDef NVIC_InitStrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE );//使能GPIO的时钟 ①
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE );//使能串口1的时钟
//PA9的设置
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//输出方式为复用推免输出
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;//设置具体的哪一个引脚
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;//设置速度
GPIO_Init(GPIOA,&GPIO_InitStrue);//I/O口的初始化 ②
//PA10的设置
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;//输入方式为浮空或者上拉 可查中文参考手册外设的GPIO的设置
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;//设置具体的哪一个引脚
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;//设置速度
GPIO_Init(GPIOA,&GPIO_InitStrue);//I/O口的初始化 ②
//串口初始化
USART_InitStrue.USART_BaudRate=76800;//设置波特率
USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//没有硬件流
USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//使能接收和发送
USART_InitStrue.USART_Parity=USART_Parity_No;//没有奇偶校验
USART_InitStrue.USART_StopBits=USART_StopBits_1;//设置了一个停止位
USART_InitStrue.USART_WordLength=USART_WordLength_8b;//字长为8个字节
USART_Init(USART1,&USART_InitStrue); // ③
//串口使能
USART_Cmd(USART1,ENABLE );// 使能串口1
//设置中断 在misc.c中
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接受到数据时发生中断
NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;//在stm3210x.h的顶层头文件中
NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE ;//开启中断通道
NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;//设置抢占优先级 只有一个中断 所以设置为1
NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;//设置子优先级
NVIC_Init(&NVIC_InitStrue);//设置相应中断的抢占优先级和响应优先级
}
//中断服务函数 在启动文件中已经定义好的 startup_stm32f10x_hd.s
void USART1_IRQHandle(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))// 证明现在接受的中断是我们接受到的数据产生的中断
{
res=USART_ReceiveData(USART1); //接受串口1的数据
USART_SendData(USART1,res);//发送串口1的数据
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组在misc.c中
My_USART1_Init();
while(1);
}
|
|