assert_param(IS_GPIO_MODE(GPIO_InitStruct-GPIO_Mode));意思是:IS_GPIO_MODE(GPIO_InitStruct-GPIO_Mode)这个判断条件必须为真,否则程序就会进入死循环。一般assert用来判断必须为真的一些条件,防止程序出现意外错误。
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));这句主要是判断传进函数中的参数GPIOx是否有效,因为GPIOx必须是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG这几个当中的其中一个,否则会被认为是无效的参数。
indata |= IN_Data是因为indata每次循环会向左移一位 indata = indata1;因此本次要从IO口把电平读进来,填充左移的这一位,循环8次,则可以把8bit的数据读进来,从而indata则为74HC165的数据。
[74HC165_1] 单片机的IO口扩展,使用74LS165扩展键盘 [74HC165aUART_ARM] 在Keil环境下编写的STM32代码,用来读取74HC165的数据并通过STM32串口发送(至蓝牙/SIM/PC等),波特率115200。
关于单片机串口转并口芯片74HC165的编程问题。看你的原理图,只有8个独立按键,并不是你说的8×2个。而且按键的编号K1~K8的顺序是乱的,与74HC165输入引脚顺序不相符。就不知道实物开发板是不是也这样的。
ASSERT一般用于程序内部确认参数的正确性,即调用内部函数的时候,要由调用者保证参数的正确,而被调用函数内部,就可以通过ASSERT来检查参数是否满足要求。C语言是一门通用计算机编程语言,应用广泛。
assert在C语言中称为断言,用来提示一些可能存在的错误。编写代码时,做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种*形式。
开发ASSERT宏的原始意图是在开发过程中启用它,在后面生产时要禁用。可以用NDEBUG宏激活和禁用ASSERT。正确实施的断言在被禁用后应该对嵌入式系统基本没有影响。
void assert_failed(u8* file, u32 line); 这句宏定义在STM32所有头文件里面都会出现,这是断言机制。
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));这句主要是判断传进函数中的参数GPIOx是否有效,因为GPIOx必须是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG这几个当中的其中一个,否则会被认为是无效的参数。
assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。
GPIO_WriteBit但看样子好像只能对一个管脚进行。是只能一次进行一位进行操作;多位操作只能用GPIO_Write进行操作。
`write()` 函数:`write()` 函数用来设置 GPIO 的输出状态,可以将一个整数值写入到 GPIO 端口中,例如 0 表示关闭,1 表示打开。
如果从微观时间上来说,*同时是不可能的,都是挨个操作。GPIO_Write(GPIOC,16位数)是对GPIOC的16个IO同时操作,16位数每位代表一个IO。
可以的,举2个例子:GPIO0-BRR = 0x55;GPIO1-BSRR = 0x55;这其中的GPIOx表示IO号的号码,BRR/BSRR表示相就IO口的控制寄存器,就按这个格式操作就行了。
GPIO_WriteBit(GPIOB,GPIO_Pin_12,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)));DelaymS(10);这是翻转电平,可以直接用来产生方波。
有问题的那个程序 u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);只在上面那条指令采集了一次按键数据。
1、断言是个宏,在stm32f10x_conf.h定义的。
2、将库文件中Project文件夹下的相关文件复制到工程模板文件夹下的User文件夹中。
3、在电脑上打开keil软件,进入软件后,单击软件界面中图中箭头标记的图标,单击一下后会弹出一个对话框。在对话框中找到菜单栏“Packs”,然后单击Packs菜单。然后在子菜单栏找到check for updates选项进行点击。
4、STM32固件库,我们使用的固件库为STM32F10x_StdPeriph_Lib_V0,可在st官方下载 MDK开发环境(我们使用的版本为MDK7A)。