历史上的今天
今天是:2024年09月29日(星期日)
2018年09月29日 | STM32f4---串口通信实验代码(01)
2018-09-29 来源:eefocus
打开串口实验工程,然后在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 已经有详细介绍了,这里我们就不再介绍了。
史海拾趣
|
我使用S3C2410芯片和K9F1208的FLASH。现在我的EBOOT可以实现直接下载NK.BIN并在RAM中启动,但是无法在FLASH中启动。 超级终端显示如下: TFTP: Desktop losing ACK, block number = 18570, Ack again TFTP: Desktop losing ACK, block number = ...… 查看全部问答> |
|
我在单片机中编程如下,SendKey_Protocl();是一个费时的操作,超过30ms,小于600ms,我得不到想要的结果,请问:--在中断处理服务程序中,如果费时的函数调用没有处理完是否在后台处理?还是被舍弃?。。。请问高手应该怎么处理? //TIMER0 ini ...… 查看全部问答> |
|
最近在修改eboot,(ep9315的cpu)现在发现有个擦flash的问题,运行到 Continue to Erase the rest of Flash. *pFlash = EA0003FF . ERROR: Error while erasing flash 就发生错误 不是硬件的问题,因为用自 ...… 查看全部问答> |
|
不是五系列的,想给1611做的一个系统增加usb功能,不知道应该选用什么样的usb控制芯片,做怎样的工作,需要增加多少代码,不知道1611的flash是不是够?希望高手指教… 查看全部问答> |
|
仿真器坏了,这是当时做的一个入门的小程序,可能不能入门各位法眼了。 小观一下吧。 安装方法的。。。。 点击安装,一般在win7上好用,在xp没有安装成功,可能更新的太少了。。。。。。。。 一下的步骤就不用再说了。。。。 ...… 查看全部问答> |




