STM32

初学STM32

                   2015年2月10日
通过长期的心理准备,今天我终于开始尝试着学习stm32。出来工作一段时间了,职位的工作主要是负责硬件电路,其实就是PCB板、焊接调试等工作,放弃写软件是从大学那时候开始的,偶尔有一次和同学一起写程序,可是在某个地方遇到问题,争论中我始终处于下风,并且那时候我开始发现自己的反映速度确实比较慢,所以往后几年我几乎没有碰过程序。如今的工作中,却时常会被软件硬件之间的工作搞懵了头脑,软件的说他没问题,硬件的查来查去也没问题,经常会争的面红耳赤,搞的很不开心。或许也是这些方面的原因,我试着自己弄弄程序,看造化了!
前期准备了一些资料,如《STM32用户手册》《STM32固件库_中文版》《STM3210x数据手册》还有拷了部分开发板的光盘资料。说是开始先看固件库,可是一味看下去,着实太无趣,所以弄来项目“水质分析仪”的参考程序,从建工程开始......
下面是建工程遇到的一些问题:

1.如何在workspace中同时显示多个工程
菜单:Project->Add Existing Project(向工作区添加已有的项目)。如果在Workspace工作空间切换到OverView页,则打开的这两个项目就会同时显示出来。
2.建立一个工程里面到底需要添加哪些头文件,如.c.h文件,现在还是搞不懂,就是把别人建的工程里面的文件拷贝。
3.工程配置为simulate,一步一步进入函数
①NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)设置向量表的位置和偏移。NVIC_VectTab:指定向量表位置在 RAM还是在程序存储器 。Offset:向量表基地址的偏移量
对FLASH,该参数值必须高于0x08000100 ;对RAM必须高于0x100。它同时必须是256 (64×4)的整数倍。
②assert_param是一个宏定义,在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。
③转载(void*)0的理解
一般把(void*)0定义为NULL
表示这是个空指针
void的含义
void的字面意思是“无类型”,void 则为“无类型指针”,void 可以指向任何类型的数据。
众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型

转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。

例如:
float *p1;
int *p2;
p1 = p2;

其中p1 = p2语句会编译出错,提示“’=’ : cannot convert from ‘int ’ to ‘float ‘”,必须改为:
p1 = (float *)p2;
而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:
void *p1;
int *p2;
p1 = p2;

但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包

容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错:
void *p1;
int *p2;
p2 = p1;

提示“’=’ : cannot convert from ‘void ’ to ‘int ‘”。
在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。例如:
add ( int a, int b )
{
return a + b;
}
int main(int argc, char* argv[])
{
printf ( “2 + 3 = %d”, add ( 2, 3) );
}

程序运行的结果为输出:
2 + 3 = 5
这说明不加返回值说明的函数的确为int函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值