7_26 day 27

print(a.__doc__)无法继承

print(A.__module__)来自哪个模块
print(A.__class__)来自哪个类

class Foo:
def __init__(self,name):
self.name=name
def __del__(self):
print('我执行啦')

f1=Foo('alex')

# del f1 #删除实例会触发__del__
del f1.name #删除实例的属性不会触发__del__
print('--------------------->')

#程序运行完毕会自动回收内存,触发__del__

class Foo:
def __call__(self, *args, **kwargs):
print('实例执行啦 obj()')

f1=Foo()

f1() #f1的类Foo 下的__call__

Foo() #Foo的类 xxx下的__call__












 

转载于:https://www.cnblogs.com/yikedashuyikexiaocao/p/9369505.html

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
<think>好的,用户想了解嵌入式C代码中超声波、舵机控制、ADC转换、I2C通信和按键处理的实现细节。我需要结合之前提供的引用内容,尤其是引用2、3、4中的相关信息,来构建详细的回答。首先,我得逐一分析每个模块,确保涵盖硬件配置、代码实现和关键点。 首先看超声波模块。通常使用GPIO触发信号,通过定时器测量回波时间。引用2提到STM32配置GPIO和PWM,可能需要配置输入捕获功能。然后计算距离的公式是时间乘以声速除以2,这部分需要注意定时器的时钟配置和中断处理。 接下来是舵机控制,引用3和4都涉及PWM控制SG90舵机。SG90的PWM周期是20ms,脉宽0.5ms到2.5ms对应0-180度。需要配置定时器的PWM输出,设置ARR和PSC来生成正确的频率,然后调整CCR寄存器改变占空比。引用3中的MicroPython代码可以类比到C语言中的寄存器操作。 ADC转换部分,需要初始化ADC通道,可能使用DMA进行连续采样。引用2提到ADC用于传感器数据,配置时钟和通道,校准后启动转换。需要注意采样时间和滤波处理,比如多次采样取平均。 I2C通信方面,引用2和4提到使用I2C接口与传感器通信。需要配置SCL和SDA的GPIO为开漏输出,设置时钟频率。STM32的硬件I2C函数库可以简化读写操作,注意起始条件、地址发送、数据收发和停止条件,处理ACK/NACK信号。 按键处理涉及GPIO输入,配置上拉或下拉电阻,消抖处理。可以使用轮询或外部中断,引用4中的TB6612控制可能用到GPIO电平变化。软件消抖通常用延时或定时器检查稳定状态。 需要确保每个模块的代码示例符合嵌入式C的常见写法,比如寄存器配置、库函数调用。同时,引用相关的参考内容,比如引用2的STM32固件开发,引用3的舵机控制,引用4的PWM和GPIO配置。注意用户可能实际在开发智能小车或其他嵌入式项目,结合这些应用场景给出建议,比如资源管理和实时性。 可能的问题点包括:定时器配置是否正确,PWM参数计算,I2C的时序问题,ADC的噪声处理,按键消抖的方法。需要确保回答清晰,分步骤说明,并引用相关文献。最后生成相关问题,帮助用户深入理解每个模块的细节和调试方法。</think>[嵌入式C代码功能模块实现细节] ### 一、超声波测距模块 1. **硬件配置** - 使用GPIO触发超声波发射信号(输出模式) - 配置定时器输入捕获模式接收回波信号 - 参考STM32的TIMER配置方法[^2] 2. **代码实现** ```c // 发送10us触发脉冲 HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET); delay_us(10); HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET); // 通过定时器测量高电平持续时间 uint32_t echo_time = __HAL_TIM_GET_COUNTER(&htim2); float distance = (echo_time * 340.0) / (2 * 10000); // 单位:米 ``` 3. **关键参数** - 声速补偿:$v=340m/s$ - 定时器时钟配置需满足微秒级精度[^4] ### 二、舵机控制(SG90) 1. **PWM参数** - 周期:20ms(频率50Hz) - 脉宽范围:0.5ms-2.5ms对应0°-180° - 计算公式:$CCR = \frac{(angle/180) \times 2000 + 500}{20000} \times ARR$ 2. **STM32实现** ```c // 配置TIM3通道1为PWM输出 htim3.Instance->ARR = 19999; // 20ms周期(84MHz/84分频) htim3.Instance->CCR1 = 1500; // 初始位置90度 // 角度设置函数 void Set_Servo_Angle(TIM_HandleTypeDef *htim, uint16_t angle) { uint16_t pulse = (uint16_t)(500 + angle*11.11); // 0.5ms + (angle/180)*2000 __HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, pulse); } ``` (实现原理参考OpenMV的舵机控制方法[^3]) ### 三、ADC转换 1. **配置流程** ```c // 1. ADC校准 HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED); // 2. 启动连续转换 HAL_ADC_Start(&hadc1); // 3. 获取采样值 uint32_t adc_value = HAL_ADC_GetValue(&hadc1); float voltage = (adc_value * 3.3) / 4095; // 12位分辨率 ``` 2. **注意事项** - 需配置DMA实现多通道扫描[^2] - 采样时间应大于传感器建立时间 - 软件滤波推荐使用移动平均算法 ### 四、I2C通信 1. **协议实现** ```c // 初始化I2C1 hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; // 100kHz hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; // 读取设备寄存器 HAL_I2C_Mem_Read(&hi2c1, DEV_ADDR<<1, REG_ADDR, I2C_MEMADD_SIZE_8BIT, pData, Size, Timeout); // 写入数据 HAL_I2C_Mem_Write(&hi2c1, DEV_ADDR<<1, REG_ADDR, I2C_MEMADD_SIZE_8BIT, pData, Size, Timeout); ``` (参考TB6612的I2C控制接口) ### 五、按键处理 1. **硬件设计** - 配置GPIO为上拉输入模式 - 硬件消抖电路(RC滤波)或软件消抖 2. **软件实现** ```c // 状态机实现消抖 typedef enum {RELEASED, PRESS_DETECT, PRESSED, RELEASE_DETECT} KeyState; void Key_Scan(void) { static KeyState state = RELEASED; uint8_t current = HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin); switch(state) { case RELEASED: if(current == 0) { state = PRESS_DETECT; start_time = HAL_GetTick(); } break; case PRESS_DETECT: if(HAL_GetTick() - start_time > 20) { // 20ms消抖 state = (current == 0) ? PRESSED : RELEASED; if(state == PRESSED) Key_Handler(); } break; //...其他状态处理 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值