CMSIS架构与STM32库开发方式6H.pptVIP

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) … … (GPIO_TypeDef *) 把GPIOA_BASE 地址转换为GPIO_TypeDef 结构体指针类型。 对每个GPIOx是用结构封装了寄存器组,stm32f10x.h中代码: GPIO_TypeDef ,这个结构体的首地址(变量CRL的地址)若为0x4001 1000, 那么结构体中第二个变量(CRH)地址为0x4001 1000 +0x04 ,加上的这个0x04 ,正是4字节地址偏移量。 stm32f10x.h中GPIO代码剖析 有了这样的宏,就可用以下方式来修改GPIO寄存器: GPIO_TypeDef * GPIOx; //定义一个GPIO_TypeDef型结构体指针GPIOx GPIOx = GPIOA; //把指针地址设置为宏GPIOA地址 GPIOx-CRL = 0xffffffff; //通过指针访问并修改GPIOA_CRL寄存器 通过类似的方式,我们就可以给具体的寄存器写上适当的参数,控制STM32了。 这只是库开发的皮毛,库提供了更简单的开发方式。 GPIO 1. 配置寄存器:选定GPIO的特定功能,最基本的如:选择作为输入还是输出端口。 2. 数据寄存器:保存了GPIO的输入电平 或 将要输出的电平。 3. 位控制寄存器:设置某引脚的数据 为1或0,控制输出的电平。 4. 锁定寄存器:设置某锁定引脚后,就不能修改其配置。 C语言程序举例:TESTc.C #define uint32 unsigned int #define N 10 uint32 sum; //使用加法运算来计算1+2+3+...+(N-1)+N的值。(N0) int main(void) { uint32 i; sum = 0; for(i=0; i=N; i++) { sum += i; } } GPIO库函数 7.6 LED流水灯实验 想要控制LED灯,当然是通过控制STM32芯片的I/O引脚电平的高低来实现。 LED流水灯实验 LED流水灯实验 1. GPIO端口引脚多 -- 就要选定需要控制的特定引脚 2. GPIO功能如此丰富 -- 配置需要的特定功能 3. 控制LED的亮和灭 -- 设置GPIO输出电压的高低 与GPIO相关的寄存器了,可以通过《STM32参考手册》来查看 LED流水灯实验 LED实验中用到了RCC跟GPIO这两个外设。环境配置如图: main.c led.c led.h Led流水灯主程序:main.c #include led.h void Delay(__IO uint32_t nCount) //简单延时函数 { for(; nCount != 0; nCount--);} int main(void) { LED_GPIO_Config(); while (1) { LED1( ON ); Delay(0x0FFFFF); LED1( OFF ); LED2( ON ); Delay(0x0FFFFF); LED2( OFF ); LED3( ON ); Delay(0x0FFFFF); LED3( OFF ); } } 初始化LED函数 led.c #include led.h #include stm32f10x_gpio.h #include stm32f10x_rcc.h void LED_GPIO_Config(void) { /*利用库定义一个GPIO_InitTypeDef类型的结构体*/ GPIO_InitTypeDef GPIO_InitStructure; /*开启GPIOC的外设时钟*/ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); /*选择要控制的GPIOC引脚 GPIO_In

文档评论(0)

ma982890 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档