前几天有病了,后来又断网了,现在终于又能上网了。从明天起继续更新我的进程。
流水灯我想和我一样,第一次看到会有很多不懂的地方,给大家分享一下我是怎么学的。一下内容是根据HXW718059156版主的EEPW ARM DIY手记之软件设计(二)——LED跑马灯实验自己总结出的一点东西。
一、初始化配置
1、GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO操作及配置结构体
GPIO_InitStructure为结构体名字
2、使能GPIO时钟,用到RCC_APB2PeriphClockCmd(u32 RCC_AHB2Periph,FunctionalState NewState)其中RCC_AHBPeriph的取值是
FunctionalState NewState的取值是ENABLE,DISABLE
3、设置GPIO_InitStructure.GPIO_Pin
4、设置GPIO_InitStructure.GPIO_Mode
5、设置GPIO_InitStructure.GPIO_Speed
6、设置GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
其中GPIO_TypeDef* GPIOx的取值是GPIOA/GPIOB/GPIOC/GPIOD/GPIOE/
其中GPIO_InitTypeDef* GPIO_InitStruct常用&GPIO_InitStructure对应的上面1、里面定义的结构体名字。我看了几个程序都是定义成GPIO_Init(GPIOA, &GPIO_InitStructure);
二、功能实现?(有点疑问是可以用GPIO_SetBits和GPIO_ResetBits来实现吗?)
GPIOE->BRR = led;//点亮相应的LED,即相应的GPIO 输出低电平
GPIOE->BSRR = led;//熄灭相应的LED,即相应的GPIO 输出高电平
GPIOE->ODR ^= led;//交替使LED相应的GPIO输出高电平或低电平
三、LED的点亮和熄灭
void LED_Set(Led_TypeDef led,Led_SettingDef set)
{
if(set==ON)
GPIOE->BRR = led;//点亮相应的LED,即相应的GPIO 输出低电平
else
GPIOE->BSRR = led;//熄灭相应的LED,即相应的GPIO 输出高电平
}
第一个参数的取值
typedef enum
{
LED1=GPIO_Pin_2,
LED2=GPIO_Pin_3,
LED3=GPIO_Pin_4,
LED4=GPIO_Pin_5,
ALL_LED=(GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5)
} Led_TypeDef;
第二个参数的取值
typedef enum
{
ON=1,//点亮LED操作
OFF=0//熄灭LED操作
}Led_SettingDef;
1、USART_InitTypeDef USART_InitStructure;
声明一个结构体,名字是USART_InitStructure,结构体原型由USART_InitTypeDef 确定。设置完了USART_InitStructure里面的内容后,在void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)里面调用。定义了 USART_InitStructure以后才能用
USART_InitStructure.USART_BaudRate
USART_InitStructure.USART_WordLength等因为USART_BaudRate、USART_WordLength等,都是USART_InitTypeDef的成员函数只有定义这个结构体USART_InitStructure才能从USART_InitTypeDef中继承过来。才能用USART_InitStructure.USART_BaudRate
USART_InitStructure.USART_WordLength等
另外关于同步模式和异步模式的问题
在这里,我们的版主HXW718059156用的是异步模式,所以我们只需要设置前6个。
2、USART_InitStructure.USART_BaudRate = 115200; 是设置波特率为115200
3、USART_InitStructure.USART_WordLength = USART_WordLength_8b;是设置在一个帧中传输或者接收到的数据位数。取值如下
4、USART_InitStructure.USART_StopBits = USART_StopBits_1;定义发送的停止位数目可能的取值是
5、USART_InitStructure.USART_Parity = USART_Parity_No;定义奇偶校验模式,取值为
6、USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None
定义硬件流控制是使能还是失能。
7、USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;设置工作模式,使能或失能发送或接收模式。
USART_Mode_Rx | USART_Mode_Tx;是发送接收都使能。
有个疑问,我最近看了很多楼主HXW718059156写的教程,看了很多遍串口的程序,现在是看还能看懂,就是还是不知道怎么去写,另外我感觉楼主写的很实用,不过不知道适合初学者不适合,因为我想之前学习51编程序时,刚开始也是所有的函数,所有的功能全都写到一个C文件内,后来,学的多了,就开始模块话编程,把共同的函数都写成一个一个的模块,这样用着真的很方便。现在写STM32的程序时遇到问题了,我看有的教程上是把基本功能都写到main.c内,我知道这样写不方便以后移植用,不过我感觉这样对于像我这样的初学者,如果直接写模块的话,甚至不知道楼主写的这几句该放到哪,那几句该放到哪?不过我知道模块化很方便,可以直接调用,深刻的反应了,C语言方便移植的特点。但是,我还没能学会那种方法,只有一步一步的重新开始,因为都写到一个main.c内可以清楚的看到所有的定义,所有的函数等。请楼主也给点指导。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |