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

怎么制作个人门户网站北京城乡建设部网站首页

怎么制作个人门户网站,北京城乡建设部网站首页,精彩app应用下载,在线制作网站乔拓云嵌入式开发学习之STM32F407串口#xff08;USART#xff09;收发数据#xff08;三#xff09; 开发涉及工具一、选定所使用的串口二、配置串口1.配置串口的I/O2.配置串口参数属性3.配置串口中断4.串口中断在哪里处理5.串口如何发送字符串 三、封装串口配置库文件1.创建头文… 嵌入式开发学习之STM32F407串口USART收发数据三 开发涉及工具一、选定所使用的串口二、配置串口1.配置串口的I/O2.配置串口参数属性3.配置串口中断4.串口中断在哪里处理5.串口如何发送字符串 三、封装串口配置库文件1.创建头文件.h文件2.创建源文件.c文件 四、功能实现 此次实现目的 1.芯片上电启动时发送“Hello Word” 2.发送给芯片的数据芯片又通过串口发送回来 有工程实例链接在最底部。 开发涉及工具 开发环境IDEIAR-ARM8.32.4 开发板STM32_F4VE_V2.0 下载器J-Link 串口调试软件XCOM_V2.6 固件库版本STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 一、选定所使用的串口 1.我使用的开发板是STM32F407VE芯片芯片提供有6个串口。在开发板上可以看到其单独引出了串口针脚那么我们就需要通过原理图来确认这个针脚是连接的哪一个串口如下图所示从原理图中我们不难看出收发引脚是接在芯片的PA9和PA10上面的。 2.我们翻看芯片数据手册的引脚定义表可以发现PA9对应芯片USART1_TXPA10对应USART1_RX。现在我们就可以开始配置串口1来达到数据收发的效果。 3.注意若我们是自己设计电路则步骤相反。先确认要使用的串口编号然后确认串口对应的引脚最后才将其引出针脚 二、配置串口 我们依旧可以在固件库里面去找到关于配置USART的例程在前面配置GPIO的时候我有提到过这里不再赘述直接上配置代码 1.配置串口的I/O 这里值得注意的就是要将端口设置成复用模式其他配置相同 void USART1_IO_Conf(void) {GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//IO口用作串口引脚要配置复用模式GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);GPIO_StructInit(GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_9;//TX引脚GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF;//IO口用作串口引脚要配置复用模式GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;GPIO_Init(GPIOA,GPIO_InitStructure);GPIO_StructInit(GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_10;//RX引脚GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;GPIO_Init(GPIOA,GPIO_InitStructure); }2.配置串口参数属性 这里值得注意的还有里面调用了一个配置串口中断的函数USART1_NVICConf()解释一下什么是中断中断就是有一个事件发生了我需要打断CPU现在的工作转而来处理现在发生的事件用在这里结合此句USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);的意思是配置的数据接收中断比如说别的设备给我发送了字符那么CPU你现在啥都别忙干先来看看这个字符是什么。 void USART1_Conf(uint32_t baud)//配置函数定义一个形参用于配置波特率 {USART_InitTypeDef USART_InitStructure;//定义配置串口的结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启串口1的时钟USART_DeInit(USART1);//大概意思是解除此串口的其他配置USART_StructInit(USART_InitStructure);USART_InitStructure.USART_BaudRate baud;//设置波特率USART_InitStructure.USART_WordLength USART_WordLength_8b;//字节长度为8bitUSART_InitStructure.USART_StopBits USART_StopBits_1;//1个停止位USART_InitStructure.USART_Parity USART_Parity_No ;//没有校验位USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx;//将串口配置为收发模式USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None; //不提供流控 USART_Init(USART1,USART_InitStructure);//将相关参数初始化给串口1USART1_NVICConf();//配置串口的中断USART_ClearFlag(USART1,USART_FLAG_RXNE);//初始配置时清除接受置位USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//初始配置接收中断USART_Cmd(USART1,ENABLE);//开启串口1 }3.配置串口中断 那要如何配置串口的中断呢其方法如下 void USART1_NVICConf(void) {NVIC_InitTypeDef NVIC_InitStructure;//中断控制结构体变量定义NVIC_InitStructure.NVIC_IRQChannel USART1_IRQn;//中断通道指定为USART1NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0;//主优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority 1;//次优先级为1NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;//确定使能NVIC_Init(NVIC_InitStructure);//初始化配置此中断通道 }4.串口中断在哪里处理 那么问题来了我产生了事件我CPU要在哪里来查看呢这就需要中断服务函数来实现中断服务函数不能随意命名但对其原来的名字进行重定义也可以中断服务函数的名称我们在中断向量表中查找我使用的此版固件在stm32f40_41xx.s大概120行的中断向量表里面找然后如下编写 void USART1_IRQHandler(void) {if(USART_GetITStatus(USART1, USART_IT_RXNE) SET)//判断是不是真的有中断发生{USART_SendData(USART1,USART_ReceiveData(USART1));//又将数据发回去USART_ClearITPendingBit(USART1, USART_IT_RXNE); //已经处理就清楚标志位 } }5.串口如何发送字符串 我们写一个通过串口发送字符串的函数可如下编写 void Usart_SendString(USART_TypeDef* USARTx,uint8_t *data,uint32_t dataLen) {uint32_t i;for(i 0;i dataLen;i ){USART_SendData(USARTx,data[i]);//发送数据while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) RESET);//等待发送完成} }三、封装串口配置库文件 由于我们配置串口和使用串口的功能函数比较多放在一个源文件里面比较杂乱那么我们可以直接将关于使用串口的文件封装成库文件通过导入头文件就可使用方法如下 1.创建头文件.h文件 在IAR新建一个空白文件保存为usart.h如何新建文件和保存文件我在《嵌入式开发学习之STM32F407芯片IAR环境搭建空白工程一》有提到不做赘述然后语法格式如下 #ifndef _USART_H//.h文件三要素之一 #define _USART_H//.h文件三要素之一#include stm32f4xx.h//依据自身工程情况导入头文件//外部可调用函数的声明 void USART1_IO_Conf(void); void USART1_Conf(uint32_t baud); void Usart_SendString(USART_TypeDef* USARTx,uint8_t *data,uint32_t dataLen);#endif//.h文件三要素之一2.创建源文件.c文件 在IAR新建一个空白文件保存为usart.h然后语法格式如下 #include usart.hvoid USART1_IO_Conf(void) {GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//IO口用作串口引脚要配置复用模式GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);GPIO_StructInit(GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_9;//TX引脚GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF;//IO口用作串口引脚要配置复用模式GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;GPIO_Init(GPIOA,GPIO_InitStructure);GPIO_StructInit(GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_10;//RX引脚GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;GPIO_Init(GPIOA,GPIO_InitStructure); }void USART1_NVICConf(void) {NVIC_InitTypeDef NVIC_InitStructure;//中断控制结构体变量定义NVIC_InitStructure.NVIC_IRQChannel USART1_IRQn;//中断通道指定为USART1NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0;//主优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority 1;//次优先级为1NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;//确定使能NVIC_Init(NVIC_InitStructure);//初始化配置此中断通道 }void USART1_Conf(uint32_t baud)//配置函数定义一个形参用于配置波特率 {USART_InitTypeDef USART_InitStructure;//定义配置串口的结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启串口1的时钟USART_DeInit(USART1);//大概意思是解除此串口的其他配置USART_StructInit(USART_InitStructure);USART_InitStructure.USART_BaudRate baud;//设置波特率USART_InitStructure.USART_WordLength USART_WordLength_8b;//字节长度为8bitUSART_InitStructure.USART_StopBits USART_StopBits_1;//1个停止位USART_InitStructure.USART_Parity USART_Parity_No ;//没有校验位USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx;//将串口配置为收发模式USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None; //不提供流控 USART_Init(USART1,USART_InitStructure);//将相关参数初始化给串口1USART1_NVICConf();//配置串口的中断USART_ClearFlag(USART1,USART_FLAG_RXNE);//初始配置时清除接受置位USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//初始配置接受中断USART_Cmd(USART1,ENABLE);//开启串口1 }/******** 串口1 中断服务函数 ***********/ void USART1_IRQHandler(void) {if(USART_GetITStatus(USART1, USART_IT_RXNE) SET)//判断是不是真的有中断发生{USART_SendData(USART1,USART_ReceiveData(USART1));//又将数据发回去USART_ClearITPendingBit(USART1, USART_IT_RXNE); //已经处理就清楚标志位 } }void Usart_SendString(USART_TypeDef* USARTx,uint8_t *data,uint32_t dataLen) {uint32_t i;for(i 0;i dataLen;i ){USART_SendData(USARTx,data[i]);//发送数据while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) RESET);//等待发送完成} }四、功能实现 功能实现时我们在主函数中调用配置函数即可编写如下 #include stm32f4xx.h #include delay.h #include usart.hvoid main() {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//使用了中断则这一句必须要有USART1_IO_Conf();//配置串口的IOUSART1_Conf(115200);//串口配置成波特率115200Usart_SendString(USART1,Hello Word!\r\n,13);//发送字符串while(1){} } 实验结果 工程实例链接https://download.csdn.net/download/qq_45100839/88425993
http://www.sadfv.cn/news/206938/

相关文章:

  • 个人网站开发赚钱方向威海网站建设怎么样
  • 质量好网站建设加工网站开发 居易国际
  • wordpress超链接代码怎样建设网站优化
  • 网站降权是什么意思网站设计资料
  • 安全电子商务网站设计仿网站建设教程视频教程
  • 批量网站建设合作协议英德市住房城乡建设局网站
  • 广州的企业网站建设论文查重网站建设
  • 聚美优品网站建设方案网站建设 泰安
  • wordpress 下载网站永康做网站
  • 市场来说网站建设销售发展怎么样自己怎样做网站显示危险
  • 网站单页模板制作软件建设银行网站修改手机号码
  • 深圳成交型网站建设公司网页加速器脚本
  • 链接提取视频的网站wordpress图片横向
  • 电子商务网站建设与管理的实验报告数据分析网
  • 无锡阿凡达网站建设怎么建立本地网站
  • 手机搭建电脑做的网站做网站需要什么知识
  • 单仁做的网站网站管理建设需进一步加强
  • 哪些网站百度收录快上海互联网推广找哪家
  • 制作网站谁家做的好自己做下载类网站
  • 超级链接网站模板用文件传输协议登录网站
  • 网站策划方案详解佛山企业网站seo
  • 卫计局网站建设工作总结国内重要新闻
  • 用ps如何做模板下载网站建设企业银行电脑版怎么下载
  • 东大桥网站建设tint wordpress
  • 零食电子商务网站建设策划书用邮箱地址做网站域名好吗
  • c 可以做网站嘛网上哪里有卖嗅探器
  • 钢材贸易网站建设电商物流建设网站过程
  • 简述网站建设的概念怎样弄微信公众号
  • cnzz网站建设wordpress 调用最新评论
  • 南京网站设计优化公司wordpress页面链接404