1、相机IO接线

可以看出,Line2和Line3可以使用GPIO输出和输出功能

2、编程控制IO引脚电平转变

     /**第2根线电平设置*****************************************************************************///首先选择线emStatus = GX_STATUS_SUCCESS;int64_t line2=2;emStatus = GXSetEnum(m_hDevice, GX_ENUM_LINE_SELECTOR, line2);GX_VERIFY(emStatus);//选择方向emStatus = GX_STATUS_SUCCESS;int64_t direction2 = 1;emStatus = GXSetEnum(m_hDevice, GX_ENUM_LINE_MODE, direction2);GX_VERIFY(emStatus);电平翻转//bool     b0Value    = true;//emStatus = GXSetBool(m_hDevice, GX_BOOL_LINE_INVERTER, b0Value);//GX_VERIFY(emStatus);//设置电平emStatus = GX_STATUS_SUCCESS;bool     b0Value    = false;//低电平//emStatus = GXSetBool(m_hDevice, GX_BOOL_USER_OUTPUT_VALUE,b0Value);//GX_VERIFY(emStatus);// 将当前选择的引脚电平反转值设置到相机中emStatus = GXSetBool(m_hDevice, GX_BOOL_LINE_INVERTER, b0Value);GX_VERIFY(emStatus);/**第3根线电平设置*****************************************************************************///首先选择线emStatus = GX_STATUS_SUCCESS;int64_t line3=3;emStatus = GXSetEnum(m_hDevice, GX_ENUM_LINE_SELECTOR, line3);GX_VERIFY(emStatus);//选择方向emStatus = GX_STATUS_SUCCESS;int64_t direction3 = 1;emStatus = GXSetEnum(m_hDevice, GX_ENUM_LINE_MODE, direction3);GX_VERIFY(emStatus);电平翻转//bool     b0Value    = true;//emStatus = GXSetBool(m_hDevice, GX_BOOL_LINE_INVERTER, b0Value);//GX_VERIFY(emStatus);//设置电平emStatus = GX_STATUS_SUCCESS;bool  b1Value    = false;//高电平//emStatus = GXSetBool(m_hDevice, GX_BOOL_USER_OUTPUT_VALUE,b1Value);//GX_VERIFY(emStatus);// 将当前选择的引脚电平反转值设置到相机中emStatus = GXSetBool(m_hDevice, GX_BOOL_LINE_INVERTER, b1Value);GX_VERIFY(emStatus);

3、STM32程序设计
相机橙色为LINE2,接PB12
相机粉色为LINE3,接PB13
STM32的PWM输出口为PB15

IO配置

void LED_GPIO_Config(void)
{//设置读取输入引脚RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PC端口时钟  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;  //选择对应的引脚//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;          // 下拉输入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          // 上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;  //选择对应的引脚//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;          // 下拉输入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          // 上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PC端口
}

TIM配置

/* 配置TIM1复用输出PWM时用到的I/O  */
static void TIM1_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/* TIM1 clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);}/*配置TIM1输出的PWM信号的模式,如周期、极性、占空比 */
static void TIM1_Mode_Config(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;/* PWM信号电平跳变值 *///u16 CCR1_Val = 50000;        u16 CCR2_Val = 50000;u16 CCR3_Val = 50000;//u16 CCR4_Val = 125;/* -----------------------------------------------------------------------TIM1 Configuration: generate 2 PWM signals with 2 different duty cycles:TIM1CLK = 72 MHz, Prescaler = 0x0, TIM1 counter clock = 36 MHzTIM3 ARR Register = 50000 => TIM1 Frequency = TIM1 counter clock/(ARR + 1)TIM3 Frequency = 1440Hz.TIM1 Channel1 duty cycle = (TIM1_CCR1/ TIM1_ARR)* 100 TIM1 Channel2 duty cycle = (TIM1_CCR2/ TIM1_ARR)* 100 ----------------------------------------------------------------------- *//* Time base configuration */TIM_TimeBaseStructure.TIM_Period = 50000;TIM_TimeBaseStructure.TIM_Prescaler = 0;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 *//*TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse = CCR1_Val;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;//开反向通道TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;TIM_OC1Init(TIM1, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);*//* PWM1 Mode configuration: Channel2 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse = CCR2_Val;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;//开反向通道TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;     TIM_OC2Init(TIM1, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channel3 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse = CCR3_Val;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;//开反向通道TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;     TIM_OC3Init(TIM1, &TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE);/* TIM1 enable counter */TIM_Cmd(TIM1, ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE);
}/*配置和初始化TIM1 */
void TIM1_PWM_Init(void)
{TIM1_GPIO_Config();TIM1_Mode_Config();
}//粗略延时 不精确!
void DelayNuS(unsigned int i)
{unsigned char t = 0;for(;i>0;i--){for(t=0;t<2;t++){}}
}

PWM输出

void DelayNmS(unsigned int i)
{for(;i>0;i--){DelayNuS(1000);}
}
void pwm_led_out (void)
{ u16  ZHI=1000;u16  A=0;//等级变量while (1){ if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0))//B13/14为低电平{A=1;TIM1->CCR2 = 1000;TIM1->CCR3 = 1000;              }else if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0))//B13为高电平/B14为低电平{A=2;TIM1->CCR2 = 35000;TIM1->CCR3 = 35000; }else if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1))//B13为低电平/B14为高电平{A=3;TIM1->CCR2 = 45000;TIM1->CCR3 = 45000; }else if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1))//B13为低电平/B14为高电平{A=4;TIM1->CCR2 = 50000;TIM1->CCR3 = 50000; }else{TIM1->CCR2 = 50000;TIM1->CCR3 = 50000;            }}
}

main函数

#include "stm32f10x.h"
#include "pwm_output.h"
#include "led.h"int main(void)
{SystemInit(); //配置系统时钟为72M   LED_GPIO_Config(); //LED 端口初始化 TIM1_PWM_Init(); //TIM1 PWM波输出初始化,并使能TIM1 PWM输出pwm_led_out(); //用PWM控制LED模拟呼吸灯效果,可以在对应的引脚上连上LED灯观察效果}输出电压最终版
void pwm_led_out (void)
{ u16  ZHI=1000;u16  A=0;//等级变量while (1){ LED1( ON );           // 亮DelayNmS(500);LED1( OFF );          // 灭DelayNmS(500);if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0))//B13/14为低电平{A=1;TIM1->CCR2 = 50000;TIM1->CCR3 = 50000;                }else if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0))//B13为高电平/B14为低电平{A=2;TIM1->CCR2 = 25000;TIM1->CCR3 = 25000; }else if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1))//B13为低电平/B14为高电平{A=3;TIM1->CCR2 = 45000;TIM1->CCR3 = 45000; }else if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1)&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1))//B13为低电平/B14为高电平{A=4;TIM1->CCR2 = 1000;TIM1->CCR3 = 1000; }else{TIM1->CCR2 = 1000;TIM1->CCR3 = 1000;            }}
}

GPIO为false,输出为高电平
GPIO为ture,输出为低电平

两个都为低电平,电压3.18v(初始状态:最亮,3挡)
B12低电平,电压0.34V(1挡)
B13低电平,电压1.5V(2挡)
两个都为高电平,电压0.02v(关灯状态,0挡)

工业相机IO口控制STM32输出PWM波相关推荐

  1. 编写stm32输出PWM波的代码

    首先,你需要先定义 STM32 的 GPIO 引脚,然后配置 PWM 频率,最后启动 PWM 输出.具体的代码如下:GPIO_InitTypeDef GPIO_InitStructure;TIM_Ti ...

  2. 嵌入式系统开发13——STM32输出PWM实现呼吸灯

    本文主要介绍在STM32F103C8T6上,利用定时器输出PWM波形,进而驱动LED实现呼吸灯. 目录 一.任务要求 二.PWM简介 1.什么是PWM 2.相关概念 3.PWM的产生 4.PWM的通道 ...

  3. STM32单片机:定时器TIM输出PWM波

    学习32单片机过程中使用的工具:MDK Keil5 + 正点原子精英版(STM32F103ZET6)+ STM32CubeMX + HAL开发 一.PWM的产生原理 关于PWM的产生原理网上有很多教程 ...

  4. MiniFly微型四轴学习开发日志(四)——关于四轴硬件知识以及如何通过STM32输出PWM方波控制电机

    目录 四轴硬件知识 通过STM32输出PWM方波 一.四轴硬件知识 四轴无人机需要的硬件大致有以下几种:电子调速器(俗称电调),螺旋桨,电子(一般用无刷电机),飞行控制板,机架,电池,充电器,遥控器等 ...

  5. STM32CubeMX——LED定时闪烁和输出PWM波

    简介 通过学习STM32CubeMX软件,掌握配置各个部件的基本方法:了解外部中断,定时器中断,PWM波产生等功能的原理,编写程序代码,实现相应的功能. 程序预期结果: LED初始设置间隔2秒闪烁一次 ...

  6. STM32输出PWM信号(库函数版本)

    什么是PWM信号? 官方解释:PWM信号一般指脉冲宽度调制.脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳 ...

  7. STM32f103C8定时器输出PWM波信号

    利用stm32高级定时器输出PWM,模拟呼吸灯的效果带刹车功能.由于没有示波器查看输出的pwm波形图,所以本次实验使用普通直流电机模拟的. 本文章为学习笔记,其中有些地方解释的不是那么的好,即本笔记可 ...

  8. STM32之PWM波

    说起PWM波,做过智能小车的人肯定都很清楚了,其实他就是一种脉宽调制.在智能小车上,我们一般用PWM波来控制小车的速度,通过控制方波中高低电平的比例,来达到控制小车转速的目的.而32的芯片他提供了专门 ...

  9. STM32输出PWM波形以及实现LED呼吸灯

    目录 一.PWM的简介 1.PWM的定义 2.PWM的优点 3.PWM的几种控制方法 (1)等脉宽PWM法 (2)随机PWM (3)SPWM法 4.PWM的主要参数 (1)PWM占空比 (2)PWM的 ...

  10. 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM

    01树莓派直接输出PWM波 -- 硬件PWM程序  (推荐使用) #include #include #include //必不可少 int main( void) { int pwm_gpio5 = ...

最新文章

  1. laravel-mix 使用
  2. 基matlab的水果识别的应用,基于MATLAB的水果识别的数字图像处理
  3. 怎样将c语言的字体变中文,请问,在c语言中如何将阿拉伯数字转换成汉字,求代码...
  4. HTML学习02之基础;元素;属性
  5. wxWidgets随笔(7)-utf8中文(3)
  6. oracle查询表占用空,Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询...
  7. Spring Boot文档阅读笔记-exception handling–@ExceptionHandler解析与实例
  8. 5 MM配置-企业结构-分配-给公司代码分配工厂
  9. 《计算机科学导论》 数据库基础知识
  10. 【ElasticSearch】(七)浅析search_after 及 fromsize,scroll,search_after性能分析
  11. 80端口攻击_使用 ZoomEye 寻找 APT 攻击的蛛丝马迹
  12. 批发企业如何使用订单软件app管理账目混乱问题
  13. 无线蓝牙耳机选购小知识,2020新款上市五大高人气蓝牙耳机推荐
  14. Chrome 清除网站图标缓存,更新网站图标
  15. python合并两列数据_python将两列合并
  16. Unity利用SMSSDK实现短信验证码(附源代码)
  17. POSTING_INTERFACE_DOCUMENT解决特别总账'W'类型的过账问题
  18. 安卓第三方支付之微信支付
  19. 美团饿了么外卖返利小程序公众号搭建外卖返利分销系统代cps源码
  20. 联想服务器维修单据,联想ThinkServer SR650服务器故障维修

热门文章

  1. python手工打码_python云打码
  2. python gif压缩_基于python压缩gif图片大小。
  3. 当你灵感枯竭的时候,如何深挖客户需求?采用曼陀罗思考法(5W1H模式),相信你会找到出路
  4. 【gp数据库】统计常用窗口函数详解
  5. 【Multisim】关于Multisim仿真“运放积分器”出现的问题以及解决方法
  6. 【Android】 NDK开发中JNI配置及调用GPIO
  7. 常用计算机英文缩写,常用计算机英文缩写含义
  8. 合并两个有序链表-递归
  9. ArcGIS实现全国人口普查数据可视化以及热力图
  10. 微信小程序注册认证文档