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

html如何设置背景图片网站做优化每天一定要更新

html如何设置背景图片,网站做优化每天一定要更新,社区电商平台排行榜,临沂做进销存网站概述 I2C 常用在某些型号的传感器和 MCU 的连接#xff0c;速率要求不高#xff0c;距离很短#xff0c;使用简便。 I2C的通信基础知识请参见《基础通信协议之 IIC详细讲解 - 知乎》。 PY32F003 可以复用出一个 I2C 接口#xff08;PA3#xff1a;SCL#xff0c;PA2速率要求不高距离很短使用简便。 I2C的通信基础知识请参见《基础通信协议之 IIC详细讲解 - 知乎》。 PY32F003 可以复用出一个 I2C 接口PA3SCLPA2SDA可以和 DMA 配合完成 I2C 的主从通信。厂家的数据手册对 I2C 接口简述如下图。 要完成 I2C 的通信实验需要两个 MCU。这里现尝试着配置好 I2C 的从机下一篇再配置 I2C 的主机并完成两者的通信实验。 代码实现的步骤 1. 在 py32f0xx_hal_conf.h 文件中增加对 I2C 的引用 在 Exported constances 一节中将 #define HAL_I2C_MODULE_ENABLED 的注释打开打开对 I2C 功能的引用函数。打开后的代码节选如下。 /* Exported constants --------------------------------------------------------*//* ########################## Module Selection ############################## */ /*** brief This is the list of modules to be used in the HAL driver */ #define HAL_MODULE_ENABLED #define HAL_RCC_MODULE_ENABLED #define HAL_ADC_MODULE_ENABLED //#define HAL_CRC_MODULE_ENABLED //#define HAL_COMP_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED #define HAL_GPIO_MODULE_ENABLED //#define HAL_IWDG_MODULE_ENABLED //#define HAL_WWDG_MODULE_ENABLED #define HAL_TIM_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_LPTIM_MODULE_ENABLED #define HAL_PWR_MODULE_ENABLED #define HAL_I2C_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED //#define HAL_SPI_MODULE_ENABLED //#define HAL_RTC_MODULE_ENABLED //#define HAL_LED_MODULE_ENABLED //#define HAL_EXTI_MODULE_ENABLED #define HAL_CORTEX_MODULE_ENABLED /* ########################## Oscillator Values adaptation ####################*/ 2. 在 main.h 中添加 I2C 相关的函数声明 /** ---------------------------------------------------------------------------- * name : HAL_StatusTypeDef app_i2c_init(void); * brief : i2c 初始化 * param : * retval : HAL_OK: 写入成功; 其它: 错误 * remark : 上级函数必须检查操作返回值, 只有 HAL_OK 时才可继续操作 *** ---------------------------------------------------------------------------- */ HAL_StatusTypeDef app_i2c_init(void);/** ---------------------------------------------------------------------------- * brief : i2c 测试使用的三个函数, 接收/发送/等待 * param : * retval : * remark : *** ---------------------------------------------------------------------------- */ HAL_StatusTypeDef app_i2c_receive(void); HAL_StatusTypeDef app_i2c_transmit(void); void app_i2c_wait(void); 3. 在 app_i2c.c 中实现这些函数 在 Application/User 组中增加一个 app_i2c.c 文件。 /********************************************************************************* file app_i2c.c* brief I2C functions.******************************************************************************* copyright** Copyright (c) 2023 CuteModem Intelligence.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/#include main.h#define EXDATA_LEN 15 // 数据长度 #define I2C_ADDRESS 0xA0 // 本机地址0xA0 #define I2C_SPEEDBPS 100000 // 通讯速度100K #define I2C_DUTYCYCLE I2C_DUTYCYCLE_16_9 // 占空比I2C_HandleTypeDef I2cHandle; uint8_t mI2cTxBuf[EXDATA_LEN] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; uint8_t mI2cRxBuf[EXDATA_LEN] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};HAL_StatusTypeDef app_i2c_init(void) {HAL_StatusTypeDef cfg_res HAL_OK;I2cHandle.Instance I2C; // I2CI2cHandle.Init.ClockSpeed I2C_SPEEDBPS; // I2C 通讯速度I2cHandle.Init.DutyCycle I2C_DUTYCYCLE; // I2C 占空比I2cHandle.Init.OwnAddress1 I2C_ADDRESS; // I2C 地址I2cHandle.Init.GeneralCallMode I2C_GENERALCALL_DISABLE; // 禁止广播呼叫I2cHandle.Init.NoStretchMode I2C_NOSTRETCH_DISABLE; // 允许时钟延长cfg_res HAL_I2C_Init(I2cHandle); //I2C初始化if (cfg_res ! HAL_OK) return cfg_res;return cfg_res; }HAL_StatusTypeDef app_i2c_receive(void) {/*I2C从机中断方式接收*/while (HAL_I2C_Slave_Receive_IT(I2cHandle, (uint8_t *)mI2cRxBuf, EXDATA_LEN) ! HAL_OK){Error_Handler();}return HAL_OK; }HAL_StatusTypeDef app_i2c_transmit(void) {/*I2C从机中断方式发送*/while (HAL_I2C_Slave_Transmit_IT(I2cHandle, (uint8_t *)mI2cTxBuf, EXDATA_LEN) ! HAL_OK){Error_Handler();}return HAL_OK; }void app_i2c_wait(void) {/* 判断当前I2C状态, 等待I2C状态就绪 */while (HAL_I2C_GetState(I2cHandle) ! HAL_I2C_STATE_READY); } 首先定义了4个常量。 交换数据的长度 EXDATA_LENExchange Data Length本机的 I2C 地址为 0xA0I2C 的通信速率定为 100Kbps高速模式下 I2C 总线的占空比为 9/16 接着定义了 mI2CTxBuf 和  mI2CRxBuf 两个缓冲区变量长度为 EXDATA_LEN 初始化函数很简单这里设置了“禁止广播呼叫” 接收、发送函数都使用了中断式模式并使用了等待方式一直到发送/接收完毕才会返回 等待函数就是循环读 I2C 的 State 标志直到 I2C 空闲为止 4. 在 py32f0xx_hal_msp.c 增加 i2c 的外设初始化 static DMA_HandleTypeDef HdmaCh1; static DMA_HandleTypeDef HdmaCh2;... .../*** -----------------------------------------------------------------------* name : void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)* brief : 初始化I2C相关MSP* param : [in] *hi2c, I2C handler pointer* retval : void* remark :* ----------------------------------------------------------------------- */ void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) {GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_SYSCFG_CLK_ENABLE(); //SYSCFG时钟使能__HAL_RCC_DMA_CLK_ENABLE(); //DMA时钟使能__HAL_RCC_I2C_CLK_ENABLE(); //I2C时钟使能__HAL_RCC_GPIOA_CLK_ENABLE(); //GPIOA时钟使能/**I2C GPIO ConfigurationPA3 : I2C1_SCLPA2 : I2C1_SDA*/GPIO_InitStruct.Pin GPIO_PIN_3 | GPIO_PIN_2;GPIO_InitStruct.Mode GPIO_MODE_AF_OD; //推挽方式GPIO_InitStruct.Pull GPIO_PULLUP; //上拉GPIO_InitStruct.Speed GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate GPIO_AF12_I2C; //复用为I2CHAL_GPIO_Init(GPIOA, GPIO_InitStruct); //GPIO初始化/*复位I2C*/__HAL_RCC_I2C_FORCE_RESET();__HAL_RCC_I2C_RELEASE_RESET();/* I2C1 interrupt Init */HAL_NVIC_SetPriority(I2C1_IRQn, 0, 0); //中断优先级设置HAL_NVIC_EnableIRQ(I2C1_IRQn); //使能I2C中断//DMA配置HAL_SYSCFG_DMA_Req(9); //DMA1_MAP选择为IIC_TXHAL_SYSCFG_DMA_Req(0xA00); //DMA2_MAP选择为IIC_RX/* Configure the DMA handler for Transmission process */HdmaCh1.Instance DMA1_Channel1; // 选择DMA通道1HdmaCh1.Init.Direction DMA_MEMORY_TO_PERIPH; // 方向为从存储器到外设HdmaCh1.Init.PeriphInc DMA_PINC_DISABLE; // 禁止外设地址增量HdmaCh1.Init.MemInc DMA_MINC_ENABLE; // 使能存储器地址增量HdmaCh1.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; // 外设数据宽度为8位HdmaCh1.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; // 存储器数据宽度位8位HdmaCh1.Init.Mode DMA_NORMAL; // 禁止循环模式HdmaCh1.Init.Priority DMA_PRIORITY_VERY_HIGH; // 通道优先级为很高HAL_DMA_Init(HdmaCh1); // 初始化DMA通道1__HAL_LINKDMA(hi2c, hdmatx, HdmaCh1); // DMA1 关联 IIC_TX/* Configure the DMA handler for Transmission process */HdmaCh2.Instance DMA1_Channel2; // 选择DMA通道1HdmaCh2.Init.Direction DMA_PERIPH_TO_MEMORY; // 方向为从外设到存储HdmaCh2.Init.PeriphInc DMA_PINC_DISABLE; // 禁止外设地址增量HdmaCh2.Init.MemInc DMA_MINC_ENABLE; // 使能存储器地址增量HdmaCh2.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; // 外设数据宽度为8位HdmaCh2.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; // 存储器数据宽度位8位HdmaCh2.Init.Mode DMA_NORMAL; // 禁止循环模式HdmaCh2.Init.Priority DMA_PRIORITY_HIGH; // 通道优先级为高HAL_DMA_Init(HdmaCh2); // 初始化DMA通道1__HAL_LINKDMA(hi2c, hdmarx, HdmaCh2); // DMA1 关联 IIC_RXHAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 1); // 中断优先级设置HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); // 使能DMA通道1中断HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 1); // 中断优先级设置HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn); // 使能DMA通道2_3中断 } 指定 PA3 管脚为 I2C_SCL PA2 管脚为 I2C_SDA。 为 I2C 分配高优先级 使用  HAL_SYSCFG_DMA_Req() 把 DMA1 的通道1和通道2分别映射到 I2C 的 TX 和 RX 配置 DMA1 的两个通道注意收发通道的方向TX 是内存-外设RX是外设-内存 HdmaChx.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE;     HdmaChx.Init.MemDataAlignment    DMA_MDATAALIGN_BYTE; 是因为收发的都是 uint8_t 型的数据是BYTE字节型的也是因为PY32F003 的 I2C DMA 的收发缓冲区是单字节的。 本实验中着重考察 I2C 的通信所以把 HdmaChx.Init.Priority 设置得都比较高应用中不一定设置那么高的优先级这个要看应用的需求。 5. 在 py32f0xx_hal_it.c 中增加对 I2C 和 DMA 的中断服务程序 #include main.h #include py32f0xx_it.hextern UART_HandleTypeDef UartHandle; extern TIM_HandleTypeDef htim16; extern TIM_HandleTypeDef htim1; extern ADC_HandleTypeDef hadcdma; /* Add for I2C functionalities */ extern I2C_HandleTypeDef I2cHandle;... ...void DMA1_Channel1_IRQHandler(void) {HAL_DMA_IRQHandler(I2cHandle.hdmatx); }void DMA1_Channel2_3_IRQHandler(void) {HAL_DMA_IRQHandler(I2cHandle.hdmarx); }void I2C1_IRQHandler(void) {HAL_I2C_EV_IRQHandler(I2cHandle);HAL_I2C_ER_IRQHandler(I2cHandle); }... ... 注意 DMA1_Channel1 是为 TX 服务的因此执行的是 HAL_DMA_IRQHandler(I2CHandler.hdmatx)注意是hdmatxDMA2_Channl2_3 是为 RX 服务的因此执行的是 HAL_DMA_IRQHandler(I2CHandle.hdmarx)注意是hdma“r”x。 不要忘记了 I2C_IRQHander() 中把 EV 和 ER 两个都放进去。 编译和运行 按照上述步骤编译没有告警和错误F8 下载到开发板。由于还没有主机通信只能看到串口的输出并且串口收发正常。LED 灯没有闪烁说明正在等待和主机完成通信。 今天先到这里啦等主机Master板子的代码写好两台 MCU 做通信实验。
http://www.tj-hxxt.cn/news/231153.html

相关文章:

  • 建设电子商务网站的意义wordpress 批量设置标签
  • 网站内链代码企业策划工作内容
  • 江西会昌建设局网站wordpress百度网盘
  • 建立网站用英语南京做机床的公司网站
  • 做通路富集分析的网站苏州高端网站建设开发
  • 网站开发的技术风险如何建网站做传奇网友
  • 电脑网站上的电影怎么下载网站查询服务器ip
  • 秦皇岛做网站网站服务器端口号是什么
  • 莆田网站建设五维网络有限公司介绍做网站的标题
  • 网站负责人核验照片医院网站绿色模板
  • 润滑油 东莞网站建设社交主题 wordpress
  • 微网站模板源代码wordpress调用导航
  • 网站的页面风格是什么做试客刷单的网站有哪些
  • 电子商务网站的建设目标网站建设费和网站维护费的区别
  • 网站代码怎么写网页版微信二维码不能直接识别
  • 做网站号码vis设计
  • 南京模板网站建设建网站的公司公司
  • 搞钱路子一天两万电影新网站如何做seo优化
  • wordpress网站怎样网站建设的思路
  • 机械设备行业网站建设sql网站源码
  • 深圳网站建设定制平台免费自助建站全系统
  • 石家庄网站建设推广服务深圳市建网站
  • 免费建立一个网站微信公众号是干什么用的
  • 怎么让网站快速收录沈阳建信建设工程有限公司
  • 建网站的策划方案郑州网络推广专员
  • 微商城网站建设价格建设电动摩托车官网
  • 制作图片海报的软件索引擎优化 seo
  • WordPress手机号码注册seo是什么意思新手怎么做seo
  • 淄博网站制作价格低教育网站改造方案
  • 全景网站app网站开发维护前景