STM32实战项目中BUG集锦(C语言)

STM32实战项目中BUG集锦(C语言)
1、在HC05蓝牙模块中,systick定时器模块使用中,如果设置为1us中断一次,那么中断函数中只能完成几句话,不然1us很快又会产生中断,导致程序锁死。并且systick中断使能必须在延时函数中才能开启。

2、当STM32程序跑飞,将无法使用仿真器下载程序,需要改变boot启动,更换跳帽,下载程序后,在换回跳帽。

3、用蓝牙将数据发送到手机端,或者是WIFI模块上传数据到阿里云平台,均需借用c语言的库sprintf函数
sprintf(dispBuff,"Temperature: %d.%d ",DHT11_Data.temp_int, DHT11_Data.temp_deci);
HC05_SendString(dispBuff);

4、使用STM32最小系统板和大舵机、超声波模块使用中,要接入电源模块的5v,并且必须将电源模块和单片机共地。

5、配置多个模块产生中断时,需要使用NVIC配置,优先级一定要不一样,不然会无法进入中断函数。

6、使用stm32中将几个单独的工程合并起来很常见,而合并工程中常遇到的一个问题是已经将.c文件添加到工程中,而且路径也配置对了,但还是出现下面的错误“…\HARDWARE\ADC\adc.c(22): error: #20: identifier “ADC_InitTypeDef” is undefined”。笔者在参加省电子设计比赛的时候就被这个坑了很久,其实解决的方法也很简单,只需在stm32f10x_conf.h头文件中把ADC头文件注释给删掉就可以解决了。这个问题如果有接触到Android开发的小伙伴应该也能理解,就是为了减小编译工程所需的时间,通过配置文件,让工程只编译用到的源代码,从而加快开发速度。

7、TIM_SetCompare1(TIM1,1850);利用定时器产生PWM波,可以免于中断方式控制产生pwm波。

8、一个STM32F103C8T6的5V引脚只能供给两路5V模块使用,过多的模块接入将导致电压不够,最好运用一个电源模块供给电源。

9、每一条语句后加入一条printf(“1”),printf(“2”)…根据串口调试助手判断哪条语句卡死,当然最快速的方法还是利用仿真器进行调试,判断卡死的位置。

10、利用 control(count%5==0){}//用取余等于来控制程序执行次数.

11、常见电机属于感性器件,不能直接用单片机的IO驱动,一方面电流不够无法驱动,另一方面会损害单片机芯片。

12、来自贪吃蛇中非常有趣的一条代码,c语言中的随机数函数rand()。
使用rand()函数产生1-100以内的随机整数:int number1 = rand() % 100;
x=rand()%(230/10)*10;产生了10到230的整十数。
y=rand()%(230/10)*10;产生了10到230的整十数。
x=rand()%230产生了1到230的整数。
结合方向左结合,双目运算符,先执行左边的运算,在执行右边的运算

  • 乘法运算符 / 除法运算符 % 取余运算符

13、如果发送的数据是16进制数据,那么接收方需要设置为0x12,0x13(举列子)进行比对。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值