stm32学习经验

STM32 的IO口可配置成八中模式,每个IO口有七个寄存器控制

常用的有四个寄存器:CRL,CRH,IDR,ODR

CRL和CRh控制着每个IO口的模式和输出速率

IDR一个端口输入数据寄存器

ODR一个端口输出数据寄存器

在配置STM32外设的时候,任何时候都要先使能该外设的时钟

//

推挽输出:可以输出高,低电平,连接数字器推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.

//

Stm32的GRL和CRH控制着IO口的方向,

ODR 控制IO口的输出电平或上下拉电阻

IDR 用来存储当前的输入状态,

text.c(17): warning:  #1-D: last line of file ends without anewline

V编译环境对语法要求更为严格,比如:在任何C文件的结尾要留一个空行,否则有警告:my_type.h(32):warning: #1-D: last line of file ends without a newline。

还有main函数用void会出现警告:

main.c(48): warning: #951-D: return type of function"main" must be "int"

在对AduC系列ARM编译的时候会出现问题。LPC的可以正常使用。我查过,AduC系列的ARM中RV环境下没有startup.s这样文件,但是LPC中的有,我不知道是怎么回事。应该就是这个原因。

在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。

所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。

这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。

它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。

当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。


在执行assert_param()的检验时,如果发现参数出错,它会调用函数assert_failed()向程序员报告错误,在任何一个例程中的main.c中都有这个函数的模板,如下:

voidassert_failed(uint8_t* file, uint32_tline)
{
  /* User can add his own implementation to report the file name and linenumber,
     ex: printf("Wrong parameters value: file %s online %d\r\n", file, line) */

  while (1)
  {}
}

你可以按照自己使用的环境需求,添加适当的语句输出错误的信息提示,或修改这个函数做出适当的错误处理。

 

你可能感兴趣的:(stm32学习经验)