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

空投注册送币网站怎么做个人网页制作教程代码

空投注册送币网站怎么做,个人网页制作教程代码,php做网站还是linux,王也踏青图目录 STC8依赖文件库 程序结构 GPIO操作 初始化所有 使用宏配置IO口 使用函数配置IO口 UART操作 头文件 初始化 UART1 UART2 UART3 UART4 接收逻辑 UART1 UART2 UART3 UART4 发送 UART1 UART2 UART3 UART4 配置printf Timer操作 导入依赖 初始化 Time…目录 STC8依赖文件库 程序结构 GPIO操作 初始化所有 使用宏配置IO口 使用函数配置IO口 UART操作 头文件 初始化 UART1 UART2 UART3 UART4 接收逻辑 UART1 UART2 UART3 UART4 发送 UART1 UART2 UART3 UART4 配置printf Timer操作 导入依赖 初始化 Timer0 Timer1 Timer2 Timer3 Timer4 实现中断函数 PWM操作 依赖及头文件 扩展寄存器访问使能  初始化PWMA  初始化PWMB ADC操作 初始化 获取值 计算电压  I2C操作 初始化 GPIO初始化  I2C初始化 INT中断 外部中断编写 1. 引入外部中断库函数 2.配置外部中断 3.调用中断触发函数 STC8依赖文件库 老版本2022.03.01 STC8G-STC8H-LIB-DEMO-CODE_2022.03.01.zip 新版本2023.07.17 STC8G-STC8H-LIB-DEMO-CODE_2023.07.17_优化版.zip 优化版库函数2023.10.06 STC8G-STC8H库函数_优化版2023-10-6.zip 优化版库函数将NVIC.c、NVIC.h、Switch.h、Type_def.h拷贝到对应外设依赖中不需要再单独添加这些依赖了 以下模板代码均基于官方2023.07.17版本。 程序结构 #include Config.h #include GPIO.h #include Delay.hint main() {EAXSFR();GPIO_config();EA 1;while(1) {} } GPIO操作 初始化所有 P0M1 0; P0M0 0; P1M1 0; P1M0 0; P2M1 0; P2M0 0; P3M1 0; P3M0 0; P4M1 0; P4M0 0; P5M1 0; P5M0 0; P6M1 0; P6M0 0; P7M1 0; P7M0 0; 使用宏配置IO口 #define GPIO_Pin_0 0x01 //IO引脚 Px.0 #define GPIO_Pin_1 0x02 //IO引脚 Px.1 #define GPIO_Pin_2 0x04 //IO引脚 Px.2 #define GPIO_Pin_3 0x08 //IO引脚 Px.3 #define GPIO_Pin_4 0x10 //IO引脚 Px.4 #define GPIO_Pin_5 0x20 //IO引脚 Px.5 #define GPIO_Pin_6 0x40 //IO引脚 Px.6 #define GPIO_Pin_7 0x80 //IO引脚 Px.7 #define GPIO_Pin_LOW 0x0F //IO低4位引脚 #define GPIO_Pin_HIGH 0xF0 //IO高4位引脚 #define GPIO_Pin_All 0xFF //IO所有引脚//准双向口 P01为例 P0_MODE_IO_PU(GPIO_Pin_1); //高阻输入 P01为例 P0_MODE_IN_HIZ(GPIO_Pin_1); //漏极开路 P01为例 P0_MODE_OUT_OD(GPIO_Pin_1); //推挽输出 P01为例 P0_MODE_OUT_PP(GPIO_Pin_1); 使用函数配置IO口 void GPIO_config(void) {GPIO_InitTypeDef GPIO_InitStructure; //结构定义GPIO_InitStructure.Pin GPIO_Pin_3; //指定要初始化的IO,GPIO_InitStructure.Mode GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P5, GPIO_InitStructure);//初始化 } UART操作 添加NVIC.c UART.c UART_Isr.c 配置EA 1 头文件 #include UART.h #include NVIC.h #include Switch.h 初始化 UART1 void UART_config(void) {// 记得添加 NVIC.c, UART.c, UART_Isr.c COMx_InitDefine COMx_InitStructure; //结构定义COMx_InitStructure.UART_Mode UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use BRT_Timer1; //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)COMx_InitStructure.UART_BaudRate 115200ul; //波特率, 一般 110 ~ 115200COMx_InitStructure.UART_RxEnable ENABLE; //接收允许, ENABLE或DISABLECOMx_InitStructure.BaudRateDouble DISABLE; //波特率加倍, ENABLE或DISABLEUART_Configuration(UART1, COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4NVIC_UART1_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3UART1_SW(UART1_SW_P30_P31); // 引脚选择, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44 } UART2 void UART_config(void) {COMx_InitDefine COMx_InitStructure; //结构定义COMx_InitStructure.UART_Mode UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use BRT_Timer2; //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)COMx_InitStructure.UART_BaudRate 115200ul; //波特率, 一般 110 ~ 115200COMx_InitStructure.UART_RxEnable ENABLE; //接收允许, ENABLE或DISABLECOMx_InitStructure.BaudRateDouble DISABLE; //波特率加倍, ENABLE或DISABLEUART_Configuration(UART2, COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4NVIC_UART2_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3UART2_SW(UART2_SW_P10_P11); // 引脚选择, UART2_SW_P10_P11,UART2_SW_P46_P47 } UART3 void UART_config(void) {COMx_InitDefine COMx_InitStructure; //结构定义COMx_InitStructure.UART_Mode UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use BRT_Timer3; //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)COMx_InitStructure.UART_BaudRate 115200ul; //波特率, 一般 110 ~ 115200COMx_InitStructure.UART_RxEnable ENABLE; //接收允许, ENABLE或DISABLECOMx_InitStructure.BaudRateDouble DISABLE; //波特率加倍, ENABLE或DISABLEUART_Configuration(UART3, COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4NVIC_UART3_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3UART3_SW(UART3_SW_P00_P01); // 引脚选择, UART3_SW_P00_P01,UART3_SW_P50_P51 } UART4 void UART_config(void) {COMx_InitDefine COMx_InitStructure; //结构定义COMx_InitStructure.UART_Mode UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use BRT_Timer4; //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)COMx_InitStructure.UART_BaudRate 115200ul; //波特率, 一般 110 ~ 115200COMx_InitStructure.UART_RxEnable ENABLE; //接收允许, ENABLE或DISABLECOMx_InitStructure.BaudRateDouble DISABLE; //波特率加倍, ENABLE或DISABLEUART_Configuration(UART4, COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4NVIC_UART4_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3UART4_SW(UART4_SW_P02_P03); // 引脚选择, UART4_SW_P02_P03,UART4_SW_P52_P53 } UART_BaudRate波特率UARTx_SW: 引脚UART_BRT_Use 发生器UART_Configuration中的UART1 接收逻辑 UART1 if(COM1.RX_TimeOut 0) {//超时计数if(--COM1.RX_TimeOut 0) {if(COM1.RX_Cnt 0) {for(i0; iCOM1.RX_Cnt; i) {// RX1_Buffer[i]存的是接收的数据写出用 TX1_write2buff// TODO: 做具体的逻辑 on_uart1_recv}}COM1.RX_Cnt 0;} } UART2 if(COM2.RX_TimeOut 0) {//超时计数if(--COM2.RX_TimeOut 0) {if(COM2.RX_Cnt 0) {for(i0; iCOM2.RX_Cnt; i) {// RX2_Buffer[i]存的是接收的数据写出用 TX2_write2buff// TODO: 做具体的逻辑 on_uart2_recv}}COM2.RX_Cnt 0;} } UART3 if(COM3.RX_TimeOut 0) {//超时计数if(--COM3.RX_TimeOut 0) {if(COM3.RX_Cnt 0) {for(i0; iCOM3.RX_Cnt; i) {// TODO: RX3_Buffer[i]存的是接收的数据// TODO: 做具体的逻辑 on_uart3_recv}}COM3.RX_Cnt 0;} } UART4 if(COM4.RX_TimeOut 0) {//超时计数if(--COM4.RX_TimeOut 0) {if(COM4.RX_Cnt 0) {for(i0; iCOM4.RX_Cnt; i) {// TODO: RX4_Buffer[i]存的是接收的数据// TODO: 做具体的逻辑 on_uart4_recv}}COM4.RX_Cnt 0;} } 发送 UART1 TX1_write2buff(xx);// 写一个byte PrintString1(); // 写字符串 UART2 TX2_write2buff(xx);// 写一个byte PrintString2(); // 写字符串 UART3 TX3_write2buff(xx);// 写一个byte PrintString3(); // 写字符串 UART4 TX4_write2buff(xx);// 写一个byte PrintString4(); // 写字符串 配置printf 保留用到的UART宏 #define UART1 1 //使用哪些串口就开对应的定义不用的串口可屏蔽掉定义节省资源 //#define UART2 2 //#define UART3 3 //#define UART4 4 指定printf函数使用UART1串口 #define PRINTF_SELECT UART1 //选择 printf 函数所使用的串口参数 UART1~UART4 Timer操作 导入依赖 void Timer_config(void) {TIM_InitTypeDef TIM_InitStructure; //结构定义//定时器1做16位自动重装, 中断频率为1000HZTIM_InitStructure.TIM_Mode TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_T1StopTIM_InitStructure.TIM_ClkSource TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut DISABLE; //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value 65536UL - (MAIN_Fosc / 1000); //初值,TIM_InitStructure.TIM_Run ENABLE; //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer1,TIM_InitStructure); //初始化Timer1 Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer1_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 } Timer.cTimer.hTimer_Isr.cNVIC.cNVIC.h #include Timer.h #include NVIC.h 初始化 Timer0 void Timer_config(void) {TIM_InitTypeDef TIM_InitStructure; //结构定义//定时器0做16位自动重装, 中断频率为1000HZTIM_InitStructure.TIM_Mode TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMaskTIM_InitStructure.TIM_ClkSource TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut DISABLE; //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value 65536UL - (MAIN_Fosc / 1000UL); //初值,TIM_InitStructure.TIM_Run ENABLE; //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer0,TIM_InitStructure); //初始化Timer0 Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer0_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 } Timer1 void Timer_config(void) {TIM_InitTypeDef TIM_InitStructure; //结构定义//定时器1做16位自动重装, 中断频率为1000HZTIM_InitStructure.TIM_Mode TIM_16BitAutoReload; //指定工作模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_T1StopTIM_InitStructure.TIM_ClkSource TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut DISABLE; //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value 65536UL - (MAIN_Fosc / 1000); //初值,TIM_InitStructure.TIM_Run ENABLE; //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer1,TIM_InitStructure); //初始化Timer1 Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer1_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 } Timer2 void Timer_config(void) {TIM_InitTypeDef TIM_InitStructure; //结构定义//定时器2做16位自动重装, 中断频率为1000HZTIM_InitStructure.TIM_ClkSource TIM_CLOCK_1T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut DISABLE; //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value 65536UL - (MAIN_Fosc / 1000); //初值TIM_InitStructure.TIM_PS 0; //8位预分频器(n1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)TIM_InitStructure.TIM_Run ENABLE; //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer2,TIM_InitStructure); //初始化Timer2 Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer2_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级 } Timer3 void Timer_config(void) {TIM_InitTypeDef TIM_InitStructure; //结构定义//定时器3做16位自动重装, 中断频率为100HZTIM_InitStructure.TIM_ClkSource TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut DISABLE; //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value 65536UL - (MAIN_Fosc / (100*12)); //初值TIM_InitStructure.TIM_PS 0; //8位预分频器(n1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)TIM_InitStructure.TIM_Run ENABLE; //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer3,TIM_InitStructure); //初始化Timer3 Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer3_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级 } Timer4 void Timer_config(void) {TIM_InitTypeDef TIM_InitStructure; //结构定义//定时器4做16位自动重装, 中断频率为50HZTIM_InitStructure.TIM_ClkSource TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut DISABLE; //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value 65536UL - (MAIN_Fosc / (50*12)); //初值TIM_InitStructure.TIM_PS 0; //8位预分频器(n1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)TIM_InitStructure.TIM_Run ENABLE; //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer4,TIM_InitStructure); //初始化Timer4 Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer4_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级 } 实现中断函数 以Timer0为例 方式1 修改Timer_Isr.c实现中断函数的调用并在main.c中声明实现timer0_call函数 extern void timer0_call();// // 函数: Timer0_ISR_Handler // 描述: Timer0中断函数. // 参数: none. // 返回: none. // 版本: V1.0, 2020-09-23 // void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR //进中断时已经清除标志 {// TODO: 在此处添加用户代码timer0_call(); } 然后在main.c中实现timer0_call: void timer0_call(){// TODO: 在此处添加用户代码 } 方式2 直接在main.c中实现interrupt函数记得删掉或注释掉Timer_Isr.c中对应的中断函数 void Timer0_ISR (void) interrupt TMR0_VECTOR //进中断时已经清除标志 {// TODO: 在此处添加用户代码 } PWM操作 依赖及头文件 #include STC8H_PWM.h #include NVIC.h #include Switch.h 扩展寄存器访问使能  EAXSFR(); /* 扩展寄存器访问使能 */ 初始化PWMA  #define PERIOD (MAIN_Fosc / 1000) PWMx_Duty dutyA; void PWM_config(void) {PWMx_InitDefine PWMx_InitStructure;// 配置PWM1PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyA.PWM1_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO1P | ENO1N; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM1, PWMx_InitStructure); //初始化PWM// 配置PWM2PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyA.PWM2_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO2P | ENO2N; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM2, PWMx_InitStructure); //初始化PWM// 配置PWM3PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyA.PWM3_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO3P | ENO3N; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM3, PWMx_InitStructure); // 配置PWM4PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyA.PWM4_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO4P | ENO4N; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM4, PWMx_InitStructure);// 配置PWMAPWMx_InitStructure.PWM_Period PERIOD - 1; //周期时间, 0~65535PWMx_InitStructure.PWM_DeadTime 0; //死区发生器设置, 0~255PWMx_InitStructure.PWM_MainOutEnable ENABLE; //主输出使能, ENABLE,DISABLEPWMx_InitStructure.PWM_CEN_Enable ENABLE; //使能计数器, ENABLE,DISABLEPWM_Configuration(PWMA, PWMx_InitStructure); //初始化PWM通用寄存器, PWMA,PWMB// 切换PWM通道PWM1_SW(PWM1_SW_P10_P11); //PWM1_SW_P10_P11,PWM1_SW_P20_P21,PWM1_SW_P60_P61PWM2_SW(PWM2_SW_P12_P13); //PWM2_SW_P12_P13,PWM2_SW_P22_P23,PWM2_SW_P62_P63PWM3_SW(PWM3_SW_P14_P15); //PWM3_SW_P14_P15,PWM3_SW_P24_P25,PWM3_SW_P64_P65PWM4_SW(PWM4_SW_P16_P17); //PWM4_SW_P16_P17,PWM4_SW_P26_P27,PWM4_SW_P66_P67,PWM4_SW_P34_P33// 初始化PWMA的中断NVIC_PWM_Init(PWMA,DISABLE,Priority_0); } 总配置中的 PWM_Period, 配置周期计数。#define PERIOD (MAIN_Fosc / 1000) 1000 表示1s执行1000次。此处为计数值。PWM1_Duty表示占空比1个周期中高电平或者低电平出现的百分比此处为百分比的计数值。 初始化PWMB #define PERIOD (MAIN_Fosc / 1000) PWMx_Duty dutyB; void PWM_config(void) {PWMx_InitDefine PWMx_InitStructure;// 配置PWM5PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyB.PWM5_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO5P; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM5, PWMx_InitStructure); //初始化PWM, PWMA,PWMB// 配置PWM6PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyB.PWM6_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO6P; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM6, PWMx_InitStructure); //初始化PWM, PWMA,PWMB// 配置PWM7PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyB.PWM7_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO7P; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM7, PWMx_InitStructure); //初始化PWM, PWMA,PWMB// 配置PWM8PWMx_InitStructure.PWM_Mode CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty dutyB.PWM8_Duty; //PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect ENO8P; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM8, PWMx_InitStructure); //初始化PWM, PWMA,PWMB// 配置PWMBPWMx_InitStructure.PWM_Period PERIOD - 1; //周期时间, 0~65535PWMx_InitStructure.PWM_DeadTime 0; //死区发生器设置, 0~255PWMx_InitStructure.PWM_MainOutEnable ENABLE; //主输出使能, ENABLE,DISABLEPWMx_InitStructure.PWM_CEN_Enable ENABLE; //使能计数器, ENABLE,DISABLEPWM_Configuration(PWMB, PWMx_InitStructure); //初始化PWM通用寄存器, PWMA,PWMB// 切换PWM通道PWM5_SW(PWM5_SW_P20); //PWM5_SW_P20,PWM5_SW_P17,PWM5_SW_P00,PWM5_SW_P74PWM6_SW(PWM6_SW_P21); //PWM6_SW_P21,PWM6_SW_P54,PWM6_SW_P01,PWM6_SW_P75PWM7_SW(PWM7_SW_P22); //PWM7_SW_P22,PWM7_SW_P33,PWM7_SW_P02,PWM7_SW_P76PWM8_SW(PWM8_SW_P23); //PWM8_SW_P23,PWM8_SW_P34,PWM8_SW_P03,PWM8_SW_P77// 初始化PWMB的中断NVIC_PWM_Init(PWMB,DISABLE,Priority_0); } ADC操作 初始化 /******************* AD配置函数 *******************/ void ADC_config(void) {ADC_InitTypeDef ADC_InitStructure; //结构定义ADC_InitStructure.ADC_SMPduty 31; //ADC 模拟信号采样时间控制, 0~31注意 SMPDUTY 一定不能设置小于 10ADC_InitStructure.ADC_CsSetup 0; //ADC 通道选择时间控制 0(默认),1ADC_InitStructure.ADC_CsHold 1; //ADC 通道选择保持时间控制 0,1(默认),2,3ADC_InitStructure.ADC_Speed ADC_SPEED_2X1T; //设置 ADC 工作时钟频率 ADC_SPEED_2X1T~ADC_SPEED_2X16TADC_InitStructure.ADC_AdjResult ADC_RIGHT_JUSTIFIED; //ADC结果调整, ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIEDADC_Inilize(ADC_InitStructure); //初始化ADC_PowerControl(ENABLE); //ADC电源开关, ENABLE或DISABLENVIC_ADC_Init(DISABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 } 获取值 u16 result Get_ADCResult(chn); // chn: ADC_CH0, ADC_CH1, ADC_CH2 .... ADC_CH15 计算电压  float v result * 基准电压 / 采样精度; 2.5为参考电压值是实际情况而定基准电压根据电路情况确定基准电压芯片默认2.5V采样精度 12位adc2^124096 I2C操作 初始化 拷贝如下文件: I2C.c I2C.hNVIC.c NVIC.hSwitch.h GPIO初始化  void GPIO_config(void) {GPIO_InitTypeDef GPIO_InitStructure; //结构定义GPIO_InitStructure.Pin GPIO_Pin_2 | GPIO_Pin_3; //指定要初始化的IO,GPIO_InitStructure.Mode GPIO_OUT_OD; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P3, GPIO_InitStructure);//初始化 } I2C初始化 /**************** I2C初始化函数 *****************/ void I2C_config(void) {I2C_InitTypeDef I2C_InitStructure;I2C_InitStructure.I2C_Mode I2C_Mode_Master; //主从选择 I2C_Mode_Master, I2C_Mode_SlaveI2C_InitStructure.I2C_Enable ENABLE; //I2C功能使能, ENABLE, DISABLEI2C_InitStructure.I2C_MS_WDTA DISABLE; //主机使能自动发送, ENABLE, DISABLEI2C_InitStructure.I2C_Speed 13; //总线速度Fosc/2/(Speed*24), 0~63// 400k, 24M 13I2C_Init(I2C_InitStructure);NVIC_I2C_Init(I2C_Mode_Master,DISABLE,Priority_0); //主从模式, I2C_Mode_Master, I2C_Mode_Slave; 中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3I2C_SW(I2C_P33_P32); //I2C_P14_P15,I2C_P24_P25,I2C_P33_P32 } INT中断 外部中断编写 1. 引入外部中断库函数 a. Exti.hExti.cExti_Isr.c b. NVIC.h NVIC.c 2.配置外部中断 #include Exti.h #include NVIC.h/******************** INT配置 ********************/ void Exti_config(void) {EXTI_InitTypeDef Exti_InitStructure; //结构定义Exti_InitStructure.EXTI_Mode EXT_MODE_RiseFall;//中断模式, EXT_MODE_RiseFall,EXT_MODE_FallExt_Inilize(EXT_INT0,Exti_InitStructure); //初始化NVIC_INT0_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 } void ext_int0_call(void) {// 当中断触发时的实现逻辑 } 3.调用中断触发函数 extern void ext_int0_call(); // // 函数: INT0_ISR_Handler // 描述: INT0中断函数. // 参数: none. // 返回: none. // 版本: V1.0, 2020-09-23 // void INT0_ISR_Handler (void) interrupt INT0_VECTOR //进中断时已经清除标志 {ext_int0_call(); }外部中断 引脚 备注 INT0 P3.2 支持上升沿和下降沿中断 INT1 P3.3 支持上升沿和下降沿中断 INT2 P3.6 只支持下降沿中断 INT3 P3.7 只支持下降沿中断 INT4 P3.0 只支持下降沿中断
http://www.yutouwan.com/news/240998/

相关文章:

  • 国家合同模板网站wordpress手机网站模版
  • 物流商 网站建设方案苏州pc网站开发
  • 信誉好的大良网站建设哈尔滨设计公司排名
  • 网站开发的基本流程文库光谷做网站推广电话
  • 网站有多少个wordpress双栏主题
  • 北京网站建设方案常州微信网站建设咨询
  • 免费海报素材网站大全珠海网站快速排名提升
  • 顺德顺的网站建设wamp加wordpress
  • 可以做旅行计划的网站网站域名申请费用
  • 给帅哥做奴视频网站地址多用户网站建设
  • 写小说赚钱的网站阿里云虚拟主机网站建设
  • 简述商务网站建设步骤松江网站建设公司怎么样
  • 企业网站建设需注意点wordpress 5正式版
  • 衡水网站建设哪家好商城网站多少钱做
  • 上海制作网站公司哪家好泉州做网站设计
  • 腾讯云服务器网站域名备案郑州小程序开发价格
  • 手机移动开发网站建设百度指数总结
  • 室内设计网站平面案例学校网站建设费用
  • 网站建设技术中心一是加强了网站建设
  • 可以做网站挂在百度上吗windows 做网站服务器
  • 长沙网站排名西平县建设局网站
  • 网站开发时间表市场调研的重要性
  • 微商城微网站开发网页设计参考图
  • 汝州网站制作软件开发工作岗位
  • 我们的网站企业年检网上申报流程
  • 南昌建站费用江宁做网站
  • 深圳网站开发的公司电话迁安建设局官方网站
  • 网站开发竞争对手分析怎么上传网站模板
  • 电力行业网站建设网站开发项目团队人员
  • 东莞网站案例营销做体育的网站