当前位置: 首页 > news >正文

云南建设工程质量监督网站网站视频提取

云南建设工程质量监督网站,网站视频提取,手表网站大全,个人建站哪类站赚钱接着上一章讲。本章我们来讲一讲LED流水灯#xff0c;循环点亮LED。 在LED章节有的可能没有讲到#xff0c;本章会对其进行说明#xff0c;尽量每个函数说一下作用。也会在最后说一下STM32的寄存器#xff0c;在编程中寄存器是避免不了的东西#xff0c;寄存器也是非常好理… 接着上一章讲。本章我们来讲一讲LED流水灯循环点亮LED。 在LED章节有的可能没有讲到本章会对其进行说明尽量每个函数说一下作用。也会在最后说一下STM32的寄存器在编程中寄存器是避免不了的东西寄存器也是非常好理解的就是羊肉串串成一串而已。其实对于嵌入式来说大多数开发者都是根据官方提供的例程写的。很少只有手册让个人写的。只有做芯片底层开发的会根据芯片的逻辑进行代码的编写。但是对于很多开发者来说都是基于官方提供的芯片demo进行相关的底层配置与开发。 而我们要写的主要是应用层和一些模块底层的开发。而且多数的外设模块都有代码例程即使没有文档也是较为清楚的。什么样的没有代码的就是新出的芯片或者传感器笔者做过恩智浦的一款新出的包括近期做一个芯驰的开发。网上资料少得可怜只能参考官方例程。特别是芯驰的是去年10月份刚出的他们的东西会出现各种问题网上找不到但是你也不要慌他们会提供技术支持的会告诉你怎么做。这些新出的东西遇到了不要觉得是自己的问题有可能是他们芯片或者demo的问题就像近期做芯驰的开发板demo调试只有静置一段时间才可以就是断电全部断掉等一会这就是他们的问题所以遇到问题不要怕。 对了我写实战是根据F1的和F4的本质都差不多。 1-配置 static void Led_Cofig(void) {/*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启LED相关的GPIO外设时钟*/RCC_APB2PeriphClockCmd(LED_GPIO_CLCK, ENABLE);/*选择要控制的GPIO引脚*/GPIO_InitStructure.GPIO_Pin (LED1_GPIO_PIN | LED2_GPIO_PIN | LED3_GPIO_PIN | LED4_GPIO_PIN | LED5_GPIO_PIN | LED6_GPIO_PIN | LED7_GPIO_PIN | LED8_GPIO_PIN);/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;/*设置引脚速率为50MHz */GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //(指的是内部驱动电路的响应速度速度越大越快一般情况是有多个不同的速度也可根据自己的需要安排)GPIO_Init(LED_GPIO_PORT, GPIO_InitStructure);/* 关闭led灯 */GPIO_SetBits(LED_GPIO_PORT, LED1_GPIO_PIN | LED2_GPIO_PIN | LED3_GPIO_PIN | LED4_GPIO_PIN | LED5_GPIO_PIN | LED6_GPIO_PIN | LED7_GPIO_PIN | LED8_GPIO_PIN); }1.1 RCC_APB2PeriphClockCmd()函数 RCC_APB2PeriphClockCmd()函数的功能是使能GPIOx对应的外设时钟若使能GPIOC时钟对应的代码如下 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2Periph_GPIOC是在stm32f10x_rcc.h头文件中定义的。RCC_APB2Periph_GPIOARCC_APB2Periph_GPIOG定义的代码如下 #define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004) #define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008) #define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010) #define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020) #define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040) #define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080) #define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100)1.2 GPIO_Init()函数 GPIO_Init()函数的功能是初始化配置GPIO的模式和速度也就是设置相应GPIO的CRL和CRH寄存器值。函数原型如下所示 GPIO_Init()函数的功能是初始化配置GPIO的模式和速度也就是设置相应GPIO的CRL和CRH寄存器值。 第一个参数是GPIO_TypeDef类型指针变量用于确定是哪一个GPIOGPIOx取值是GPIOA~GPIOG第二个参数是GPIO_InitTypeDef类型指针变量用于确定GPIOx的对应引脚以及该引脚的模式和速度等。 1.3 GPIO_ReadInputDataBit ()函数 GPIO_ReadInputDataBit ()函数的功能是读取指定I/O口的对应引脚值也就是读取IDR在下面会介绍寄存器的值。函数原型是 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)第一个参数同GPIO_Init()函数一样第二个参数是读取GPIOx的对应引脚值。如读取GPIO6即PC6引脚代码是 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6);1.4 GPIO_ReadInputData ()函数 GPIO_ReadInputData()函数的功能是读取指定I/O口16个引脚的输入值也是读取IDR寄存器的值。函数原型如下 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);比如读取GPIOC输入端的值 temGPIO_ReadInputData(GPIOC); 但是如果采用寄存器的话就是 temGPIOC-IDR1.5 GPIO_ReadOutputDataBit ()和GPIO_ReadOutputData ()函数对比 这两个函数从字面就能知道一个是对单独的IO进行操作一个是对多个IO进行操作下面就对这两个进行分析。 //读取GPIO某个引脚的特定输出值。 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);例如读取GPIOC中PC6的值 GPIO_ReadOutputDataBit(GPIOC.GPIO_Pin_6);//读取GPIO端口指定组的值。 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); 比如读取GPIOC的值 GPIO_ReadOutputData( GPIOC);1.6 GPIO_SetBits ()和GPIO_ResetBits ()函数 上一章已经说过了本章不在多说。 函数GPIO_SetBits ()和GPIO_ResetBits ()的功能是用来设置指定I/O口的引脚输出高电平和低电平也就是设置寄存器BSRR、BRR的值。 1.7 GPIO_WriteBit ()和GPIO_Write ()函数 这两个函数和1.5的类型是一样的。非别是对单个IO和一组IO控制后面遇到这样的不在赘述默认大家都知道。 GPIO_WriteBit ()函数的功能是向指定I/O口的引脚写0或者写1也就是向寄存器ODR相应位写0或者写1。函数原型如下 void GPIO_WriteBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin, BitAction BitVal);GPIO_Write()函数的功能是向指定I/O口写数据也就是向寄存器ODR写数据。函数原型如下 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);举例 //向PC6写入1 GPIO_WriteBit(GPIOC, GPIO_Pin_6, 1); //向GPIOC写入 0x0FFFC GPIO_Write(GPIOC, 0x0FFFC);在这里需要注意一点 GPIO_WriteBit()函数是对I/O口的一个引脚进行写操作可以是写0或者写1 GPIO_SetBits()函数可以对I/O口的多个引脚同时进行置位。 这点大家一定要知道。 GPIO_WriteBit(GPIOC,GPIO_Pin_8 , 0); //只能对一个引脚置0或置1 GPIO_SetBits(GPIOC, GPIO_Pin_2 | GPIO_Pin_4); //可以同时对多个引脚置12 循环点亮LED 我设计的是8个流水灯采用共阳极的接法与PC1~7相连接。因为32不像51有移位控制语句。 先来看代码吧这可以说是非常基础的了为了方便大家理解。 void LED_Cycle(void) {uint16_t temp, i;temp 0x01;for (i 0; i 8; i){GPIO_Write(LED_GPIO_PORT, ~temp);Delay(300);temp temp 1;}for (i 0; i 8; i){GPIO_Write(LED_GPIO_PORT, ~temp);Delay(300);temp temp 1;} }首先我们从GPIOC0开始点亮这样一直循环下去PC0点亮此位为0依次类推如下 PC0亮PC输出 0x0001,取反为0xFFFE,控制码就是0xFFFE PC1亮PC输出 0x0002,取反为0xFFFD,控制码就是0xFFFD PC2亮PC输出 0x0004,取反为0xFFFB,控制码就是0xFFFB PC3亮PC输出 0x0008,取反为0xFFF7,控制码就是0xFFF7 PC4亮PC输出 0x0010,取反为0xFFEF,控制码就是0xFFEF PC5亮PC输出 0x0020,取反为0xFFDF,控制码就是0xFFDF PC6亮PC输出 0x0040,取反为0xFFBF,控制码就是0xFFBF PC7亮PC输出 0x0080,取反为0xFF7F,控制码就是0xFF7F 然后重复执行。根据上面的只需将控制码从GPIOC输出即可。怎样输出呢就是出事一位为高然后进行取反操作在对其进行移位然后进行循环操作方法不止这一种可尝试其他方式。 “GPIO_Write(GPIOC,temp);”语句将初始控制码0x0001取反也就是0xFFFE后从GPIOC口输出使得PC为低电平点亮PC0其他位为高电平然后延时一段时间让控制码移位获得下一个控制码然后再对控制码取反后输出到GPIOC口就这样依次进行。 主函数 int main() {LED_Init();while (1){LED_Cycle();} }今天太晚了哪天腾出一章用来写各个寄存器本来是想和库函数穿插这说的。又考虑到有些人对寄存器不太熟悉穿插着对其不太友好。今天就到这了喜欢就动动手一键三连谢谢。
http://www.hkea.cn/news/14284059/

相关文章:

  • 网站建设银行转账数据显示网站模板
  • 长沙网站制作品牌做网站拉广告
  • 如何将wordpress上传到站点凡科互动下载
  • 搜狗站长工具综合查询咸阳学校网站建设公司
  • 来个网站2021能用的上海襄阳网站建设
  • p2p网站建设多少钱东莞推广号
  • 网站建设工作描述网站右侧虚代码
  • 塑胶原料 东莞网站建设菠菜彩票网站怎么建设
  • 广东品牌网站建设报价基础网络建设方案
  • 网站防护找谁做开发商房产证迟迟办不下来怎么办
  • 网站插件代码大全wordpress缩略图顺序
  • 网站认证值不值得做百度sem竞价托管
  • 海口网站建设优化湛江网站制作推广
  • 三五互联网站建设微信网站制作教程
  • 吉林网站网站建设js开发安卓app
  • 学校网站建设分析文化展厅的设计方案
  • 帆客建设网站搜索引擎优化seo信息
  • 卖网站赚钱wordpress 执行流程
  • 为什么网站建设要值班网络课程营销推广方案
  • 网络公司怎样推广网站开网站建设公司好
  • 1m的带宽做网站可以吗网站建设时间规划表
  • 集团网站建设工作方案腾讯用户体验网站
  • 网站的类型有哪几种北京室内设计
  • 中小企业网站建设价位凡科代理登录
  • 网站开发具体工作内容黄埔五屏网站建设
  • 国外mod大型网站加盟餐饮的网站建设
  • 温州手机网站制作推荐网站开发开题报告范文2019
  • 在线制作钓鱼网站源码企业网上办事大厅
  • 上海站有云网络科技有限公司wordpress代码实现图片放大
  • 中国航空集团建设开发有限公司网站黄骅市企业名录