在一个数与另一个数之间切换

index = index & 0x07; //用&操作实现到8归零(-1也可以)

关于为什么 OLED 和 LCD 屏显示数字要加 0x30 ?

因为显示数字是以 ASCII码形式显示的,0x30就是ASCII码的 ‘0’

把一个千位数,如1234 把它各位提取出来算法?

1234/1000(千位)

1234%1000/100 (百位)

1234%100/10(十位)

1234%10(个位)

a = GPIO_ReadInputData(KEYPAD4x4PORT) & 0xff; 这个函数是4x4阵列键盘的,这里为什么用 & 0xff ?

因为这个函数返回的是32位的,而我们只需要8位的数据所以 &0xff 就获取 8位了(1&0=0,1&1=1)

如何将16位参数转换为2个8位参数?

该16位数据转换为16进制状态时,其中高8位在前面,低8位在后面 。如该16位数据(4582),其16位进制为11E6。所以高8位为11,低8位为E6。

高8位计算(取整):将该16位数据(十进制)除以256,得到的整数即为高8位数据

低8位计算(取余):将该16位数据(十进制)除以256,得到的余数即为低8位数据

或者用这种方法:高8位:(data >>8) & 0xFF 低8位:(data&0xFF)

STM32 JTAGSWD禁用导致无法烧写?

GPIO引脚重映射时,当调用 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE)函数时,则改变指定管脚的映射,完全禁用(JTAG+SW-DP)不但关闭了JTAG还关闭了SWD,这样一来,如果你使用该方式来烧写程序,那么你下一次将面临这无法烧写程序的后果,下面就介绍解决问题的办法:

  1. 按着板子上面的复位键不放,若没有按键,就用夹子短路复位电容,这样单片机将停止程序的运行;
  2. 这时候点击Keil的下载,下方的“Build Output”窗口便会开始滚动,一会之后会提示出错。直接关闭它,放开复位键。
  3. 这时候单片机已经停止程序了,SWD那些端口已经恢复原有的调试端口功能,这时候你再一次按下载键便可以下载程序了,问题解决!!!

如果使用SWD进行调试,建议设置功能为JTAG-DP禁用 + SW-DP使能,应调用函数GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE)

利用异或运算做简单加密与解密?

一个数与另一个数做两次异或运算后得到原值,或者说恢复到原来的值