打印
[STM32]

立创商城STM32F系列——STM32f4串口通信实验代码(01)

[复制链接]
829|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小乐Tzz|  楼主 | 2018-8-31 12:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32f4————串口通信实验代码(01)
/*******************************************************/
打开串口实验工程,然后在SYSTEM组下双击usart.c,我们就可以看到该文件里面的代码,先介绍 uart_init函数,该函数代码如下:
void uart_init(u32 bound)
{
      GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

//GPIOA和USART1时钟使能①
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能 GPIOA 时钟   
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能 USART1 时钟   
   
//USART_DeInit(USART1);  //复位串口 1 ②
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //PA9复用为USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //PA10复用为USART1
   
//USART1_TX   PA.9 PA.10  ③
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //速度 50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10

//USART 初始化设置 ④
USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
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); //初始化串口

#if EN_USART1_RX  //NVIC 设置,使能中断 ⑤
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断
//Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;    //响应优先级 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      //IRQ 通道使能
NVIC_Init(&NVIC_InitStructure);  //根据指定的参数初始化VIC 寄存器、
#endif
}
   USART_Cmd(USART1, ENABLE);  //使能串口  ⑥
从该代码可以看出,其初始化串口的过程,和我们前面介绍的一致。我们用标号①~⑥标示了顺序:
①  串口时钟使能,GPIO时钟使能
②  设置引脚复用器映射
③  GPIO 端口初始化设置
④  串口参数初始化
⑤  初始化 NVIC 并且开启中断
⑥  使能串口
这里需要注意一点,因为我们使用到了串口的中断接收,必须在 usart.h 里面设置 EN_USART1_RX为1 (默认设置就是1的) 。该函数才会配置中断使能,以及开启串口1的NVIC中断。这里我们把串口 1中断放在组2,优先级设置为组2 里面的最低。
串口 1 的中断服务函数 USART1_IRQHandler,在 5.3.3 已经有详细介绍了,这里我们就不再介绍了。
/*******************************************************/


【立创商城】STM32F103CBT6 托盘  https://item.szlcsc.com/8796.html

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

70

帖子

0

粉丝