您的位置 首页 硬件

STM32单片机的学习经历

随便写写,关于stm32最近在学习stm32,写点东西,虽然简单,但都是原创啊开发板是前辈画的,好像是用来测试一个3G功能的,不过对于我

随意写写,关于stm32 最近在学习stm32,写点东西,尽管简略,但都是原创啊

开发板是长辈画的,好像是用来测验一个3G功用的,不过关于我来说太远;我要来了3个,自己焊了一个最小体系,好在公司资源仍是不错的,器材芯片有,还能够问问长辈–对公司仍是比较满意的,尽管薪酬少了点,但学东西第一位O(∩_∩)O~。
最开端当然是建工程了,这个真不太会,前前后后竟用了一周(时刻真长,别见笑啊),上网查资料, 问长辈,自己揣摩。。。总算搞定,然后从GPIO开端学,开端还真没什么条理(尽管在大学学点51,但彻底没有真实使用,顶多是跑马灯试验),开端纠结是从寄存器开端学仍是从库函数开端学,后来看到一句“用库函数入门,用寄存器进步”所以下定决心用库,但其时没有库的概念,成果走了许多弯路,看了许多不必要的东西,其时竟没了解到仅仅调用库就OK了,其他不必管。最终悉心的在www.51hei.com教程网看完一个例程后照本宣科写了一个,经过了屡次调试今后,灯总算亮了!那个振奋啊。再次还要感谢http://www.51hei.com/mcu/1106.html的作者他写的GPIO使用方法让我少走了许多弯路,接着学的EXTI,其时对中止的了解仅仅概念上的,也不知道中止程序要放在中止函数里(it.c),总归现在想想其时怎样那么不开窍啊。渐渐的中止也弄出来了,一会我会把程序贴出来,很简略的嘿。渐渐的有点感觉找到门了:先大致看一下要学习概要,找个例程,一个函数一个函数的看,要点了解装备的什么,参数,然后在头脑中构成一个大约的概括,尽管有时候不是特别明晰;接着学习TIMER(通用定时器),仅仅学习了最简略的溢出中止,其他捕获什么的都还没有看呢–想先对stm有个整体的学习,下一步预备每个模块细细“研读”。使用定时器溢出中止做了个闪灯小程序;接着顺便把学习过的GPIO,EXTI,TIMER混在一同做了一个优先级(NVIC)的程序,以来了解下优先级,二来对前面的学习是一个温习,尽管很简略,但没能一会儿就调出来–其实每次都会在细节上出不少过失:时钟忘使能啦,GPIO没有装备全啦,称号写错啦(很初级,但这个有时候真的不好找),概念了解不对啦。。。。。。有时候憋的真是适当难过,但问题处理的那一刻真怎是一个“爽”字了得啊,当然条件是自己处理的;接下来学USART(串口),本来我也不知道有串口这么个东西,但弄单片机的要是不知道“串口”就比如开车的不知道轮胎相同了,开端彻底没有概念,什么波特率啊,奇偶校验位啊,中止位啊,对着一堆名词看着都头大。渐渐的了解到串口是一种通讯传输方法,就和USB相同,仅仅串口比USB早出生好多年。这时候现已有点门了,看概念,抄例程,看函数,了解,依据自己的了解改参数,完结!学会了串口,今后就能够经过串口来调查数据了(我的试验板但是没有屏的);下一个是DMA,DMA但是个好东西,至于怎样好,百度一下,我们就知道了;下来ADC(模数转化),便是把模拟量转化成数字量,听说stm之所以强壮,ADC算一个重要条件,我仅仅简略了使用了一个测电压的功用(能够说是ADC的最简略功用了),用串口显现探针(自己焊上去的)所测到的电压值,首要卡在了两个当地:1忘掉装备串口的GPIO(所以必定要注意细节,一个细节能憋我1天) 2对通道的了解不行,原以为通道自己找串口(现在发现自己挺单纯的),实践是每个通道对应自己的GPIO口,或模块(如温度传感器),“一知半解”又让我卡了1天。处理这两个问题后,串口赫然呈现数字啦,并且是探地是0,探电源是33xx(3.3V的),还真准呢啊;现在在学习I2C(刚刚开端看),还在看概念。。。
期望自己坚持下去,提前能写出一个归于自己的程序,完结一个说的曩昔的功用,下面把我的程序粘出来,和我们共享下,大虾看到了别见笑啊

注:1.有两个灯,PA4 B12,都是低电平点亮
2.有两个按键,PB8 和 PB9,按下是低电平
3.程序开端后两个灯常亮,按下按键后平息,抬起后持续亮

main.c中

#include “stm32f10x.h”
#include “stm32f10x_gpio.h”
#include “stm32f10x_rcc.h”
#include “stm32f10x_exti.h”

void RCC_Configuration(void) //时钟装备函数
{
ErrorStatus HSEStartUpStatus;
//使能外部晶振
RCC_HSEConfig(RCC_HSE_ON);
//等候外部晶振安稳
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//假如外部晶振发动成功,则进行下一步操作
if(HSEStartUpStatus==SUCCESS)
{
//设置HCLK(AHB时钟)=SYSCLK 将体系时钟进行分频后,作为AHB总线时钟
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//PCLK1(APB1) = HCLK/2 将HCLK时钟2分频后给低速外部总线
RCC_PCLK1Config(RCC_HCLK_Div2);
//PCLK2(APB2) = HCLK HCLK时钟装备给高速外部总线
RCC_PCLK2Config(RCC_HCLK_Div1);
//外部高速时钟HSE 4倍频
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);
//发动PLL
RCC_PLLCmd(ENABLE);
//等候PLL安稳
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//体系时钟SYSCLK来自PLL输出
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//切换时钟后等候体系时钟安稳
while(RCC_GetSYSCLKSource()!=0x08);
}
// 下面这些都是外设总线上所挂的外部设备时钟的装备

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/255403.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部