STM32资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GPIOA这个结构体中的CRL这个元素的倒数第二个字符置零。。倒数5位开始到8位置零
GPIOA->CRL原来是有初始值的 比如说0xffffffff
GPIOA->CRL&=0XFFFFFF0F则表示:
GPIOA->CRL=GPIOA->CRL&0XFFFFFF0F 即
GPIOA->CRL=0xffffffff&0XFFFFFF0F
0x01是8位的 二进制是00000001 这里要转成32位的 即0x0001,这句话的意思是将这个1转换成32位之后左移pinpos这个变量值的这么多位!串口编程啊,孩子,这个GPIO口的BSRR寄存器置位操作!
追问(((uint32_t)0x01) << pinpos)为什么就可以把0x01转换成unsigned int类型的呢 有什么固定的转换的格式吗?
uint32_t后面的_t是什意思呢
回答我X!uint32_t这个是整个的一个数据类型,系统使用typedef 定义的,按照字面上来说这个是个unsigned int 型的数据! typedef uint32_t unsigned int。。。哪那么多为什么,uint32_t是个整体,就是一个类型名罢了! 我之前说了!BSRR是个32位的寄存器!你的数据时8位的,你要对32位进行操作只有进行扩充才行!这。。。。。我感觉你还是去看看书在说,假如你连这个都看不懂,我觉得你的C语言学得相当有问题,并且你不适合对底层硬件接口的编程!你的知识差得太多了!
追问谢谢 明白了 我看stdint.h里面写的 int_leastN_t, int_fastN_t
least和fast是什么啊
还有(((uint32_t)0x01) << pinpos);写成下面这样行不行啊
((uint32_t)0x01) << pinpos;
回答既然你都看懂了uint32_t 那就可以看懂int_leastN_t, int_fastN_t啊,,,可以那么写,但是推荐不要改人家的,不清具体情况,不好解答!
<<稀里糊涂玩STM32>>
#elif
编辑
#elif 使您得以创建复合条件指令。如果前面的 #if 和前面的任何 #elif(可选)指令表达式的计算结果都不是 true,则将计算 #elif 表达式。如果 #elif 表达式计算为 true,编译器将计算位于 #elif 和下一个条件指令之间的所有代码。例如:
#define VC7 //...
#if debug
Console.Writeline( "Debug build" );
#elif VC7
Console.Writeline( "Visual Studio 7" );
#endif
可以使用运算符 ==(相等)、!=(不相等)、&&(与)及 ||(或)来计算多个符号。还可以用括号将符号和运算符分组。
#elif 等效于使用:
#else
#if
使用 #elif 更简单,因为每个 #if 都需要一个 #endif,而 #elif 即使在没有匹配的 #endif 时也可以使用。
有关如何使用 #elif 的示例,请参见 #if。
GPIO_Init(GPIOA, &GPIO_InitStructure)
声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,
stm32里面初始化GPIO用的吧。。设置完了GPIO_InitStructure里面的内容后
在GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用,
比如初始化pa口,就是
GPIO_Init (GPIOA, &GPIO_InitStructure),括号里后面那个就是你问题里面声
明的那个结构体
while语句的原型是while(表达式)语句,当表达式为非0值时,执行while语句中的嵌套语句。
那么while(1)其中1代表一个常量表达式,他永远不会等于0。所以,循环会一直执行下去。除非你设置break等类似的跳出循环语句循环才会中止
while(i--)其中i是一个变量,因此表达式i--有不同的值,依次递减,i--是先取值后减,--i先加后取值,所以i--的值同未执行该自减运算时的i相等。因此当i为0时,循环会跳出
很容易混淆的是把i--的值误认为i执行自减后的值,可以编个小程序验证下
#include
#include
using namespace std;
int main()
{
int i=1;
while(i--)//此时i=0
{
i--;//执行该语句i为-1
break;
}
cout<system("pause");
}
输出为-1,说明执行了循环内i--的语句
希望能帮到你..