5牛粪在等鲜花 5牛粪在等鲜花
自动化修行中!
关注数: 3 粉丝数: 47 发帖数: 1,262 关注贴吧数: 9
学了几个月STM32的一点小总结,初学者可以稍微看一下! STM32从大三开学时开始买开发板学习,花了大概一个月时间利用库固件库把STM32得基本外设都试了一遍,可能时以前写过MFC程序所以对固件库还是比较快的上手了,但是对USB协议、文件系统、UCOS、还没有开始去深入学习!就我目前的水平好像还没有能力去看懂那些东西!以前只学过51单片机,开始学STM32的时候感觉和51完全不一样呀! 51哪有那么复杂得去寄存器配置呀,直接对IO口操作,所以学了STM32后我才对单片机有了一个比较深刻得认识,单片机其实就是按照数据手册来设置寄存器的值哪里要设置为1哪里要设置为0才能让IO口得到你想要的功能,有了固件库后你可以省掉很多时间去看数据手册它完全可以让你不用去了解寄存器而直接通过调用函数去配置寄存器,但是当你把固件库操作掌握后你可以去看固件库里面的底层函数是怎样去配置寄存器的,然后按照库函数的配置顺序去直接操作寄存器来实现你想要的功能,所以我觉得学习固件库是完全必要的!真搞不懂有些人竟然不屑于学固件库。但是当老师叫我测量一下STM32的单次ADC转换时间的时候,我完全不知道怎么去做,最后耐着性子去看ADC和定时器得硬件结构,最后想到了一个方法去测量时间:先打开定时器让他自动计数,然后在单次ADC转换前读一下计数寄存器得值(这个操作是直接读寄存器得的值的,因为好像库函数没有这个函数),等ADC转换完后再读一次值,相减后就是ADC转换时间了!所以直接操作寄存器和库函数要同时使用才能事半功倍呀!呵呵!但是操作寄存器你完全可以在库函数里面找到灵感和方法! 这是测ADC的核心代码: c=TIM2->CNT; //读取定时器计数值 for(i=0;i<10;i++) //ADC循环测量10次 { while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//等待一次AD转换结束 k=ADC_ConvertedValue; //读取转换的AD值 } d=TIM2->CNT;//读取定时器计数值 printf("\t%d",d-c);//打印测量值
1 下一页