从51开始,单片机玩了很长时间了,有51,pic,avr等等,早就想跟潮流玩玩arm,但一直没有开始,原因-----不知道玩了arm可以做什么(对我自己而言)。如果为学习而学习,肯定学不好。然后cortex-m3出来了,据说,这东西可以替代单片机,于是马上开始关注。也在第一时间开始学习,可惜一开始就有点站错了队,选错了型(仍是对我自己而言)。我希望这种芯片应该是满大街都是,随便哪里都可以买得到,但我选的第一种显然做不到。为此,大概浪费了一年多时间吧,现在,回到对我来说是正确的道路上来啦,边学边写点东西。
这里写的是我的学习的过程,显然,很多时候会是不全面的,不系统的,感悟式的,甚至有时会是错误的,有些做法会是不专业的。那么,为什么我还要写呢?这是一个有趣的问题,它甚至涉及到博客为什么要存在的问题。显然,博客里面的写的东西,其正确性、权威性大多没法和书比,可为什么博客会存在呢?理由很多,我非专家,只说我的感慨。
我们读武侠小说,总会有一些创出独门功夫的宗师,功夫极高,然后他的弟子则基本上无法超越他。我在想,这位宗师在创造他自己的独门功夫时,必然会有很多的次的曲折、弯路、甚至失败,会浪费他的很多时间,而他教给弟子时,则已去掉了这些曲折和弯路,当然更不会把失败教给弟子,按理说,效率应该更高,可是没用,弟子大都不如师。为什么呢?也许知识本身并不是最重要的,获取知识的过程才是最重要的?也许所谓的知识,并不仅仅是一条条的结论,而是附带着很多说不清道不明的东西?如植物的根,一条主根上必带有大量的小小的触须?
闲话多了些,就权当前言了。下面准备开始。
详情参阅:stm32单片机小tips(1):充分准备与开始编程
勉勉强强看懂一行程序
继续学习中,先把开发板自带一个例子做了些精简,以免看得吓人。。。。
就是这个,让portd上接的4个led分别点亮。
开始研究代码
int main(void)
{
init_all_periph();
。。。。。。
看到这一行,开始跟踪,于是又看到了下面的内容
void init_all_periph(void)
{
rcc_configuration();
。。。。。。
继续跟踪
void rcc_configuration(void)
{
systeminit();
。。。。。。
这行代码在system_stm32f10x.c中找到了。
void systeminit (void)
{
/* reset the rcc clock configuration to the default reset state(for debug purpose) */
/* set hsion bit */
rcc-》cr |= (uint32_t)0x00000001;
/* reset sw, hpre, ppre1, ppre2, adcpre and mco bits */
#ifndef stm32f10x_cl
rcc-》cfgr &= (uint32_t)0xf8ff0000;
#else
rcc-》cfgr &= (uint32_t)0xf0ff0000;
#endif /* stm32f10x_cl */
/* reset hseon, csson and pllon bits */
rcc-》cr &= (uint32_t)0xfef6ffff;
/* reset hsebyp bit */
rcc-》cr &= (uint32_t)0xfffbffff;
/* reset pllsrc, pllxtpre, pllmul and usbpre/otgfspre bits */
rcc-》cfgr &= (uint32_t)0xff80ffff;
#ifndef stm32f10x_cl
/* disable all interrupts and clear pending bits */
rcc-》cir = 0x009f0000;
#else
/* reset pll2on and pll3on bits */
rcc-》cr &= (uint32_t)0xebffffff;
/* disable all interrupts and clear pending bits */
rcc-》cir = 0x00ff0000;
/* reset cfgr2 register */
rcc-》cfgr2 = 0x00000000;
#endif /* stm32f10x_cl */
/* configure the system clock frequency, hclk, pclk2 and pclk1 prescalers */
/* configure the flash latency cycles and enable prefetch buffer */
setsysclock();
}
这一长串的又是什么,如何来用呢?看来,偷懒是不成的了,只能回过头去研究stm32的时钟构成了。
相当的复杂。
工程师stm32单片机学习基础手记(2):从勉强看懂一行程序到io口研究
stm学习笔记——用定时器实现荧火虫灯
在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫灯为例。
用st库所带的例子tim中的timbase为例来修改,这个例子的位置以及如何建立工程请参考第7篇笔记,这里就不再重复了,下面简述一下修改的过程。
(1) 由于我的板子上的灯是由pd8~pd11来控制的,因此,要将
void rcc_configuration(void)
中的:
rcc_apb2periphclockcmd(rcc_apb2periph_gpioc, enable); //打开gpioc的时钟
改为
rcc_apb2periphclockcmd(rcc_apb2periph_gpiod, enable); //打开gpiod的时钟
(2) 将四个通道全部设置为tim_ocmode_toggle模式,即将
/* output compare timing mode configuration: channel1 *
tim_ocinitstructure.tim_ocmode = tim_ocmode_timing;
改为:
tim_ocinitstructure.tim_ocmode = tim_ocmode_toggle;
(3)例子中原来中断产生的频率很低,是不适合于做这种荧火虫灯的,但为了比较,我只改了最后一个值:
详情参阅:工程师stm32单片机学习手记(3):修修改改玩串口
从51开始,单片机玩了很长时间了,有51,pic,avr等等,早就想跟潮流玩玩arm,但一直没有开始,原因-----不知道玩了arm可以做什么(对我自己而言)。如果为学习而学习,肯定学不好。然后cortex-m3出来了,据说,这东西可以替代单片机,于是马上开始关注。也在第一时间开始学习,可惜一开始就有点站错了队,选错了型(仍是对我自己而言)。我希望这种芯片应该是满大街都是,随便哪里都可以买得到,但我选的第一种显然做不到。为此,大概浪费了一年多时间吧,现在,回到对我来说是正确的道路上来啦,边学边写点东西。
这里写的是我的学习的过程,显然,很多时候会是不全面的,不系统的,感悟式的,甚至有时会是错误的,有些做法会是不专业的。那么,为什么我还要写呢?这是一个有趣的问题,它甚至涉及到博客为什么要存在的问题。显然,博客里面的写的东西,其正确性、权威性大多没法和书比,可为什么博客会存在呢?理由很多,我非专家,只说作为一个学习32位单片机的工程师角度来分享整个学习过程,整理成一个学习手记,也便于以后文档备份。
详情参阅:stm32学习手记(5):数据的保存与毁灭!
stm32单片机小tips之rtc实践
bkp还没有搞完,怎么又换到了rtc上了,因为rtc和bkp有些联系,想不关联还不行呢。
以下是数据手册上有关rtc的介绍:
******介绍开始
15.1 rtc 简介
实时时钟是一个独立的定时器。rtc模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
rtc模块和时钟配置系统(rcc_bdcr寄存器)是在后备区域,即在系统复位或从待机模式唤醒后rtc的设置和时间维持不变。
详情参阅:stm32单片机小tips(6):玩转iar,开发stm32
寒武纪持续研发投入 2020年亏损收窄,营收稳步上涨
亚马逊构建高度自动化人工智能系统 可追踪公司员工工作效率
关于二极管的PN结的知识介绍
压力传感器的原理及应用
紫光展锐规划的产品战略
工程师应该掌握的STM32单片机关键基础精华
PS5手柄造型疑似曝光 手柄摇杆更小扳机键更大
如何避免运放负反馈产生的自激振荡?
digilent口袋仪器平台简介
加密货币怎么赚钱
引发巴黎圣母院火灾的原因竟然是它?
苹果日历邀请怎么删除?苹果承认iOS日历狂发垃圾信息正出手解决
TOREX特瑞仕热搜电压调节器电路框图设计
消失的手机SD卡,手机厂商的又一次胜利
vivo联合腾讯视频推出臻彩视听专区 打造创新视听盛宴
支持双向充放电的高效Buck-Boost控制器——TMI5810
功率单位mw和dbm的换算表
TurboFlex®柔性配电电缆96系列Glenair
磁保持继电器的工作原理
ERP系统可以帮助企业解决哪些问题