第一个问题,怎么初始化串口
讲怎么初始化串口之前,先说下什么是初始化吧,即对即将使用到的资源的各种属性按照你的需求,在其可供选择的范围之内进行设置,使得每次运行程序使用该资源的时候,他都可以按照你的设置去工作。
现在讲讲怎么初始化,串口,使用它进行信息收发,那势必会使用到两个引脚,Tx和Rx,那么我们得先学会引脚的初始化,即GPIO的初始化。GPIO有什么属性我们一一来看,首先是他的速率,其次是他的8种模式,以及管脚号,这是他的属性,初始化不止这些,在设置属性之前先要给他使能,那么知道它在哪个总线上是必须的(后续有详细介绍),可以通过编辑器查看,也可以记下来,使能完成以后,就用一个结构体完成对他的初始化吧,代码如下:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能时钟
GPIO_InitTypeDef GPIO_InitStruct;//用结构体初始化其属性
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; //管脚号
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//模式,其余几种稍后详解
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//速率
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//一般用不到
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//一般用不到
GPIO_Init(GPIOA, &GPIO_InitStruct);//到这里就完成了
这是刚提到的八种GPIO_MODE,简单介绍一下
STM32的GPIO模式有以下8种:
typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;(这是keil里的结构体,下面是我带有解释性的模式)
1. 输入模式(Input mode)
当GPIO配置为输入模式时,它将读取外部信号,并将其传输到CPU或其他系统级组件。该模式具有低功耗和高稳定性的特点。
2. 输出模式(Output mode)
当GPIO配置为输出模式时,它将向外部设备或其他系统级组件发送信号。这个模式可以用于驱动LED,马达,蜂鸣器等外部设备。该模式具有较高的稳定性,低功耗和高灵活性。
3. 复用模式(Alternate mode)
当GPIO配置为复用模式时,它将多个外设连接到同一个GPIO引脚上。每个外设都对应特定的GPIO模式。例如,UART通信使用不同的GPIO模式进行收发信号的复用。该模式具有较高的可扩展性和灵活性。
4. 模拟模式(Analog mode)
当GPIO配置为模拟模式时,它将成为模拟输入或输出引脚,用于输入或输出模拟电信号。该模式适用于模拟信号需要传输的场合,具有较高的精确度和可靠性。
5. 推挽输出模式&