stm32
2016-09-25 22:07
288 查看
stm32
stm32方法总结
相信很多人学习单片机都是从51开始的,而相对于51来说,stm32的代码量明显增加,并且了解到一定程度就知道stm32的代码不可能都自己写(因为代码量不允许),因此学习方向一般分为库函数开发和寄存器开发方式。初学者最好通过库函数方式进行学习,因为stm32的寄存器太多了,会看晕的。而直接调用打包好的库函数,学习难度就会简单很多。比如:GPIO口来说(创建工程和添加项目和51相似,不在多说)主要写一个时钟使能函数和结构体定义函数函数,然后在主函数中调用GPIO的初始化就好了,示例程序://LED IO初始化 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1P 4000 eriph_GPIOF, ENABLE);//使能GPIO时钟 //GPIOF9,F10的初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出功能 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOF, &GPIO_InitStructure);//以上为GPIO初始化具体内容 GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIOF9,F10初始为灯灭状态 //GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);GPIOF9,F10初始为灯亮状态 }
这样一看主体就是三部分,时钟使能,GPIO初始化内容设置,IO口位置对应电平高低。同理中断,串口,ADC等都是这样的,只要能够熟练调用这些函数并理解意思,就可以很好初步掌握stm32。再以中断为例:
void EXTI0_IRQHandler(void) { delay_ms(10); if(WK_UP==1) //按下WK_UP键触发 { BEEP=!BEEP; //蜂鸣器翻转 } EXTI_ClearITPendingBit(EXTI_Line0); //清楚LINE0上的中断标志位 } void EXTI2_IRQHandler(void) { delay_ms(10); if(KEY2==0) //按下KEY2键触发 { LED0=!LED0; //LED0翻转 } EXTI_ClearITPendingBit(EXTI_Line2); //清楚LINE2上的中断标志位 } void EXTIX_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; KEY_Init(); //按键初始化函数 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);//PE2 连接到中断线2,下同 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line2; EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中断时能 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发 EXTI_Init(&EXTI_InitStructure);//中断触发方式 EXTI_InitStructure.EXTI_Line=EXTI_Line0; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x03;//响应(子)优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02; NVIC_Init(&NVIC_InitStructure);//中断优先级 NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02; NVIC_Init(&NVIC_InitStructure); }
看样子代码挺长,其实很有规律,一共有三个函数,前两个就是中断函数了,而第三个就是中断函数的初始化函数前两个学过51的人都知道,都能够满足一定条件,就会跳进中断,而进入中断的方式以及中断进行的优先级就由初始化函数里配置了。
通过上面两个例子大家对stm32学习方向有个大概了解吧。
相关文章推荐
- 更新linux底层库(openssl)
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- 修复mysql数据库
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究