STM32编程小总结

来源:本站
导读:目前正在解读《STM32编程小总结》的相关信息,《STM32编程小总结》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32编程小总结》的详细说明。
简介: 在主函数里,把需要用得到的各模块配置函数调用写入,这一点很重要。配置了NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; 那么PX2输出PWM就会出现不可预知的问题。

1.在主函数的正式调用里,RCC的配置一定要在各外设的函数调用之前。

2.外设调试出现问题时,一定先考虑是不是没有打开外设的时钟。并且RCC配置和外设时钟的打开要在配置寄存器之前。

3.使用模块化编程可以使程序简单易读,可移植性高,下一次调用方便。但是可能会出现很多问题,必须一一克服。 在主函数里,把需要用得到的各模块配置函数调用写入,这一点很重要。

4.模块化编程时,一定要确保模块的.c文件添加进了工程目录,否则会出现:Undefined Symbol的错误提示,这一点要牢记。

5.中断服务函数必须要写进stm32f10x.it.c里面。否则会出问题。

6.有时添加的模块太多可能会调试不出来,这时考虑把GPIO的端口复用AFIO打开。

7.外部中断的应用:

(1).EXTI的GPIO外部线路中断设置;

(2).EXTI初始化配置;

(3).中断服务函数里的写法:(如EXTI_9_5之类)尽量单元间 各自用各自的if和else if。

互相的单元间不要用else if连接。

( 4 ).中断服务函数里第一步就要清除中断标志位。

8.初始化外设如果在循环里面,比如PWM配置:

while(1)

{ TIM_Config(); }

这个时候如果不加延迟语句,很可能会出错,加入延迟可以一定程度改善。

9.break语句是跳出里的最近的循环体。但是要注意,if不属于循环体。所以一个while(1)里面只有if,一个break就让全盘跳出while(1)!

10. while(1)

{

if(!Front_LDR_Signal)

{

if(a==1)

{}

else

{

a=1;

b=0;

drive(700,0,700,0);

Delayms(80);

}

}

if(Front_LDR_Signal)

{

if(b==1)

{}

if(b==0)

{

a=0;

b=1;

drive(700,0,0,0);

Delayms(80);

}

}

用if双层判断语句可以很好地避免每一次循环都要重新配置PWM,节约CPU。这个用法很好。

11.外部中断函数不能进入的原因分析:

1)GPIO或者AFIO的时钟没有开启;

2)GPIO和配置的中断线路不匹配;

3)中断触发方式和实际不相符合;

4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线;

5)外部中断是沿触发,有可能不能检测到沿,比如 中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续为高电平;

6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。

12.中断NVIC的配置(尤其是其中的NVIC_InitStructure.NVIC_IRQChannel = EXTIx_IRQn;),绝对不可以占用输出等功能的GPIO口通道。比如配置了NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; 那么PX2输出PWM就会出现不可预知的问题。

提醒:《STM32编程小总结》最后刷新时间 2024-03-14 01:09:44,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32编程小总结》该内容的真实性请自行鉴别。