资讯 更多 >>
51与STM32学习先后解析
股票行情快报:江南高纤(600527)8...
陈阿婆(关于陈阿婆的基本详情介绍)
中国恒大:已向联交所申请8月28日起复牌
健康码怎么填(健康码怎么填的)
加2.6万买新版!现代新沐飒售14.78...
澳门食盐供应充足价格稳定 市民无...
2023年广西声乐领军人才培养计划正式开班
光大证券:自8月28日起降低投资者股...
AITO问界M5标准版正式亮相 售价25.98万元起
动态更多 >>
你们,温暖了2021
西安市新增27个中风险地区 目前有1...
广西新增本土确诊病例1例
哈尔滨市全域均为低风险地区
寒潮将影响我国中东部地区 四川盆...
昆明至哈尔滨一航班发现1名入境复阳...
陕西研考:封控区内考生在原报考点...
北京今日最高气温仅5℃ 明起强冷空...
那年今日 | 历史上的12月22日发生...
我要找债主
会展 更多 >>
美籍酿酒师在崇礼:中国是第二故乡...
河南项城报告2名疑似新冠肺炎病例 ...
浙江绍兴确诊病例首次零新增 上虞...
广西东兴实行全员居家隔离 启动口...
新疆全方位推进乡村振兴 “富春山...
云南瑞丽市主城区全员核酸检测结果...
内蒙古满洲里累计治愈出院本土确诊...
孙海洋夫妻驱车山东阳谷:还在为孙...
大国工匠追梦“玉米强国”40载:用...
让南海“海洋热带雨林”斑斓多彩
专题报道 
当前位置: 资讯 > >> 正文
 
51与STM32学习先后解析
来源:哔哩哔哩     时间:2023-08-26 08:47:19

51单片机的开发模式基于寄存器开发,这里的寄存器我们可以把它想象成中间人。需要通过配置寄存器(端口、定时器、串口、AD、IIC、SPI等)去控制片上的外设,也就是通过一定的游戏规则(没人教你,游戏你一样会玩,还贼溜)告诉中间人你要做什么。配置寄存器的过程是了解单片机内部硬件非常重要的基础。买一个开发板就可以搞定这部分的学习,初步掌握这些寄存器的使用方法。比如配置STC15W408AS的端口为输入或输出,配置定时器0的定时时间,示例代码如下。

/*******************************************************/void Init_STC15W408AS(void) //初始化端口{    P1M0 = 0xFF; P1M1 = 0x00; P3M0 = 0x05; P3M1 = 0xFA;P5M0 = 0x00; P5M1 = 0x30;}void Init_Timer0(void) //初始化定时器0=1ms@{AUXR |= 0x80;//定时器时钟1T模式TMOD &= 0xF0;//设置定时器模式TL0 = 0xCD;//定时器赋初值TH0 = 0xD4;    ET0 = 1;    //使能定时器0TR0 = 1;//定时器0开始计时EA = 1;//打开总中断}/*******************************************************/


(资料图片)

所谓的“电子工程师”教唆初学者:51已经过时,直接学STM32单片机就可以了,可能还会涉及到编程思想很难转换等言论。当他说出51已经过时,就知道这个人是个外行。

通过系统的学习和使用之后,再去学习别的单片机,你会发现大多数的单片机的开发使用模式都差不多,底层都是通过寄存器控制外设。51单片机直接配置寄存器,而STM32由于需要配置的寄存器较多,官方推出现成的库(中间人太多,需要1个代表)让用户直接调用,一次性去配置所用外设的相关寄存器,这样可以有效减少工作量以及出错的机率,意义重大。下面是配置STM32端口的示例代码,使用参考:STM32单片机介绍1。

void KEY_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);//PE13 PE14 开漏输入检测手动合分闸  PE11预分预合  PE12远方就地按键GPIO__Pin = GPIO_Pin_14|GPIO_Pin_12;GPIO__Speed = GPIO_Speed_50MHz;GPIO__Mode = GPIO_Mode_IN_FLOATING;//GPIO__Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO__Pin = GPIO_Pin_8|GPIO_Pin_9;GPIO__Speed = GPIO_Speed_50MHz;GPIO__Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO__Pin = GPIO_Pin_8|GPIO_Pin_9;GPIO__Speed = GPIO_Speed_50MHz;GPIO__Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO__Pin = GPIO_Pin_0|GPIO_Pin_12|GPIO_Pin_15;GPIO__Speed = GPIO_Speed_50MHz;GPIO__Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO__Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIO__Speed = GPIO_Speed_50MHz;GPIO__Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD, &GPIO_InitStructure);}

51单片机最基础、最简单、最好学,本着从易到难的原则先从它开刀,去系统地认识单片机并初步掌握使用单片机的一般方法,这个很关键,另外对于培养个人的自信心也有裨益。有了51单片机扎实的基础,其他单片机的学习即可水到渠成。

---------------------------------------------------------------------------------------------

以上是本人对51与STM32哪个先学的一些个人建议,下面讲述编程习惯,日后如有添加并入此处。

1)变量名不要用a、b、c等无意义字符,代码多了,你就能体会到有多痛苦,力求见名知意。

//变量定义unsigned int KeyCount=0; //按键计数volatile unsigned char DistanceValue=0; //0-DistanceBaseData之间取值unsigned int AdjustDistanceMaxTime=0; //调距等待的最长时间计数unsigned char SendIRTime=0; //发射时间unsigned char SendIRStep=0; //发射步骤unsigned int OutCount=0; //输出计数

2)if……else……严格对齐好,增加代码的可读性。

3)认真且准确的书写注释,增进代码的可读性与可维护性。

4)尽量少用goto语句,当代码比较复杂时很容易造成流程的混乱。

---------------------------------------------------------------------------------------------

不积跬步,无以至千里;不积小流,无以成江海。觉得不错,动动发财的小手点个赞哦!

关键词:

热门推荐
猜你喜欢