网站字体设计重要性wordpress手机
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:17
当前位置: 首页 > news >正文
网站字体设计重要性,wordpress手机,给公司建网站,wordpress4.7安装基础概念弄懂了之后#xff0c;对于实际开发中断初始化流程和寄存器查阅是很重要的。 1.EXINT介绍 2.功能描述和配置流程 中断初始化流程☆ 1选择中断源 2选择触发方式 3使能中断或事件 4产生软件触发 中断清除流程 其他注意点 3.EXINT寄存…基础概念弄懂了之后对于实际开发中断初始化流程和寄存器查阅是很重要的。 1.EXINT介绍 2.功能描述和配置流程 中断初始化流程☆ 1选择中断源 2选择触发方式 3使能中断或事件 4产生软件触发 中断清除流程 其他注意点 3.EXINT寄存器描述 4.例程源码分析(初始化源码) 文末附上按键中断配置基于AT32、定时器中断配置AT32、STM32、ADC接收中断 代码及分析。 但是注意AT32定时器中断是特定外设比如定时器模块自带的一种中断类型通常不是挂在外部中断线上。 1. EXINT介绍 EXINT 共计有 25 条中断线 EXINT_LINE28:0每条中断线均支持通过边沿检测触发和s来产生中断或事件。 EXINT 可以根据软件配置独立的使能或禁止中断或事件并采取不同的边沿检测方式检测上升沿或检测下降沿或同时检测上升沿和下降沿以及触发方式边沿检测触发或软件触发或边沿检测和软件同时触发响应触发源独立的产生中断或事件。 EXINT 控制器的主要特性 中断线0~15所映射的IO可以独立的配置 每个中断线都有独立的触发方式选择 每个中断都有独立的使能位 每个事件都有独立的使能位 共25个可独立产生和清除的软件触发 每个中断都有独立的状态位 每个中断都可以被独立的清除2. 功能描述和配置流程 EXINT 共计有 25 条中断线 EXINT_LINE28:0可以通过边沿检测的方式分别检测来自 GPIO 的外部中断源以及包括 PVM 输出ERTC 闹钟事件ERTC 入侵事件和时间戳事件ERTC 唤醒事件OTGFS 唤醒事件USART1/USART2/USART3 唤醒事件以及 I2C1 唤醒事件共九种芯片内部的中断源; 其中来自 GPIO 的中断源可以通过软件编程配置 SCFG 中的复用外部中断配置寄存器 xSCFG_EXINTCx灵活的选择需要注意的是这些输入源是互斥的例如EXINT_LINE0 只能选择 PA0/PB0/PC0/PD0…中的某一个而不能同时选择 PA0 和 PB0 作为输入源。 EXINT支持多种边沿检测方式每条中断线可以通过软件编程配置极性配置寄存器1EXINT_POLCFG1和极性配置寄存器 2EXINT_POLCFG2独立的选择上升沿检测或下降沿检测或同时进行上升沿和下降沿检测中断线上检测到的有效边沿触发可以用于产生事件或中断。 EXINT 支持独立的软件触发产生中断或事件即除了来自中断线上的有效边沿外用户可以通过软件编程配置软件触发寄存器EXINT_SWTRG对应位来产生对应的中断或事件。 EXINT 具备独立的中断和事件使能位用户可以通过软件编程配置中断使能寄存器EXINT_INTEN和事件使能寄存器EXINT_EVTEN来使能或关闭对应的中断或事件这意味着无论是通过边沿检测还是软件触发产生中断或事件都需要提前使能对应的中断或事件。 EXINT 具备独立的中断状态位用户可以通过中断状态寄存器EXINT_INTSTS读取对应的中断状态并通过对该寄存器相应位写 1 来清除已置位的状态标志。 中断初始化流程☆ 1 选择中断源 即配置复用外部中断配置寄存器 xSCFG_EXINTCx(如果需要使用 GPIO 作为中断源需要该步骤)。 2 选择触发方式 即配置极性配置寄存器 1EXINT_POLCFG1和极性配置寄存器 2EXINT_POLCFG2。 3 使能中断或事件 即配置中断使能寄存器EXINT_INTEN和事件使能寄存器EXINT_EVTEN。 4 产生软件触发 即配置软件触发寄存器EXINT_SWTRG产生软件触发此步骤仅适用于需软件触发产 生中断的应用。 中断清除流程 清除标志即对中断状态寄存器EXINT_INTSTS对应位写 1 来清除已产生的中断同时该操作会同步清除软件触发寄存器EXINT_SWTRG中的对应位。 其他注意点 若需要更改中断源配置应先关闭中断使能寄存器和事件使能寄存器后再重新开始中断初始化流程的配置。 3. EXINT寄存器描述 下表列出了 EXINT 寄存器的映像和复位值。 必须以字32 位的方式操作这些外设寄存器。 4. 例程源码分析初始化源码 按键中断 /*** brief configure button exint* param none* retval none/ void button_exint_init(void) {exint_init_type exint_init_struct;crm_periph_clock_enable(CRM_SCFG_PERIPH_CLOCK, TRUE);scfg_exint_line_config(SCFG_PORT_SOURCE_GPIOA, SCFG_PINS_SOURCE0);exint_default_para_init(exint_init_struct);exint_init_struct.line_enable TRUE;exint_init_struct.line_mode EXINT_LINE_INTERRUPT;exint_init_struct.line_select EXINT_LINE_0;exint_init_struct.line_polarity EXINT_TRIGGER_RISING_EDGE;exint_init(exint_init_struct);nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);nvic_irq_enable(EXINT0_IRQn, 0, 0); }软件触发方式触发 ADC /** brief exint configuration.* param none* retval none/ static void exint_config(void) {gpio_init_type gpio_initstructure; //配置GPIO初始化结构体变量exint_init_type exint_init_struct; //配置外部中断初始化结构体变量crm_periph_clock_enable(CRM_SCFG_PERIPH_CLOCK, TRUE); //启用外部中断所需的时钟crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE); //启用相关GPIO端口的时钟crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE); //启用相关GPIO端口的时钟gpio_default_para_init(gpio_initstructure); //默认初始化GPIO配置参数结构体/ config exint line 11 and line 15 /gpio_initstructure.gpio_pull GPIO_PULL_DOWN; //下拉电阻gpio_initstructure.gpio_mode GPIO_MODE_INPUT; //输入模式gpio_initstructure.gpio_drive_strength GPIO_DRIVE_STRENGTH_STRONGER;//强驱动gpio_initstructure.gpio_pins GPIO_PINS_11;gpio_init(GPIOC, gpio_initstructure);gpio_initstructure.gpio_pull GPIO_PULL_DOWN;gpio_initstructure.gpio_mode GPIO_MODE_INPUT;gpio_initstructure.gpio_drive_strength GPIO_DRIVE_STRENGTH_STRONGER;gpio_initstructure.gpio_pins GPIO_PINS_15;gpio_init(GPIOA, gpio_initstructure);/ 配置外部中断线指定要使用的GPIO端口和引脚 */scfg_exint_line_config(SCFG_PORT_SOURCE_GPIOC, SCFG_PINS_SOURCE11); scfg_exint_line_config(SCFG_PORT_SOURCE_GPIOA, SCFG_PINS_SOURCE15);exint_default_para_init(exint_init_struct); //初始化外部中断配置参数结构体exint_init_struct.line_enable TRUE; //使能外部中断线exint_init_struct.line_mode EXINT_LINE_EVENT; //设置触发模式为事件触发exint_init_struct.line_select EXINT_LINE_11; //选择外部中断线11作为配置的外部中断线exint_init_struct.line_polarity EXINT_TRIGGER_RISING_EDGE; //上升沿触发exint_init(exint_init_struct); //按照结构体配置初始化/对外部中断线15进行配置时会继承之前的触发设置包括上升沿触发/exint_init_struct.line_select EXINT_LINE_15; //选择外部中断线15作为配置的外部中断线exint_init(exint_init_struct); //按照结构体配置初始化 }//NVIC中断优先级在后续ADC和DMA初始化里面自行配置定时器中断 这里讲一下 定时器中断一般指定时器的计数器溢出中断 其他常见的定时器中断类型包括
- 比较匹配中断当定时器计数器的值匹配预设的比较值时会产生比较匹配中断。这种中断可以用于实现定时器的 PWM脉冲宽度调制功能或者其他需要在特定计数值触发的操作。
- 输入捕获中断定时器可以用于捕获外部信号的时间信息当输入信号发生边沿变化时可以产生输入捕获中断。
- 输出比较中断定时器可以用于生成输出信号当定时器计数器的值匹配预设的比较值时可以产生输出比较中断。
- PWM 中断 在使用定时器实现 PWM 输出时可能会配置 PWM 输出比较中断用于控制 PWM 的输出状态。/* stm32定时器初始化 中断使能 / void Tim3_Int_Init(u16 arr,u16 psc) {TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器时钟TIM_TimeBaseInitStruct.TIM_ClockDivision TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period arr;TIM_TimeBaseInitStruct.TIM_Prescaler psc;TIM_TimeBaseInit(TIM3,TIM_TimeBaseInitStruct);//初始化定时器TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//开启定时器中断NVIC_InitStruct.NVIC_IRQChannel TIM3_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority 0;NVIC_InitStruct.NVIC_IRQChannelSubPriority 3;NVIC_Init(NVIC_InitStruct);//配置NVICTIM_Cmd(TIM3,ENABLE);//使能定时器 }void TIM3_IRQHandler(void) {if(TIM_GetITStatus(TIM3,TIM_IT_Update) 1)//检查是否更新中断{TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除更新中断标志LED1 !LED1;}}/ AT32定时器初始化 生成外部中断事件 / void exint_line4_config(void); //配置外部中断线4 static void tmr1_config(void); //定时器1初始化//uint8_t i,num,num1 0;/** brief exint line4 config. configure pa0 in interrupt mode* param None* retval None/ void exint_line4_config(void) {exint_init_type exint_init_struct;crm_periph_clock_enable(CRM_SCFG_PERIPH_CLOCK, TRUE); //启用外设时钟exint_default_para_init(exint_init_struct); //初始化外部中断配置结构exint_init_struct.line_enable TRUE; //启用外部中断线exint_init_struct.line_mode EXINT_LINE_INTERRUPT; //置外部中断模式为中断模式exint_init_struct.line_select EXINT_LINE_4; //选择外部中断线4exint_init_struct.line_polarity EXINT_TRIGGER_RISING_EDGE; //设置触发极性为上升沿触发exint_init(exint_init_struct); //初始化外部中断exint_flag_clear(EXINT_LINE_4); //清除外部中断标志nvic_irq_enable(EXINT4_IRQn, 0, 1); //使能外部中断4的 NVIC 中断 }/** brief tmr1 configuration.* param none* retval none* 配置定时器1使其以1Hz的频率触发溢出中断并在溢出时执行相应的中断处理程序/ static void tmr1_config(void) {crm_clocks_freq_type crm_clocks_freq_struct {0}; //定义并初始化系统时钟频率结构体/ get system clock /crm_clocks_freq_get(crm_clocks_freq_struct); //获取系统时钟频率crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE); //启用定时器1的外设时钟/ (systemclock / (system_core_clock/10000)) / 10000 1Hz(1s) // 设置定时器1的基本参数包括计数器的重载值和预分频器的值以实现1Hz1秒的定时功能 /tmr_base_init(TMR1, 10000-1, system_core_clock/10000-1); //初始化定时器基本参数:能推出 TMR1 的时钟源为系统时钟tmr_cnt_dir_set(TMR1, TMR_COUNT_UP); //设置定时器计数方向为向上计数tmr_clock_source_div_set(TMR1, TMR_CLOCK_DIV1); //设置定时器时钟源分频tmr_interrupt_enable(TMR1, TMR_OVF_INT, TRUE); //使能定时器1的溢出中断nvic_irq_enable(TMR1_OVF_TMR10_IRQn, 0, 0); //使能定时器1的 NVIC 中断 }/** brief tmr1 interrupt handler* param none* retval none当定时器溢出时切换LED灯状态并生成exint软件中断事件外部中断线4触发时切换LED灯状态/ void TMR1_OVF_TMR10_IRQHandler(void) {//检查定时器溢出中断标志位是否被设置:定时中断if(tmr_interrupt_flag_get(TMR1,TMR_OVF_FLAG) ! RESET) {//生成exint软件中断事件触发1s定时器中断EXINT_LINE_4at32_led_toggle(LED2);// printf(1s counter: %d\r\n, num1);exint_software_interrupt_event_generate(EXINT_LINE_4);tmr_flag_clear(TMR1,TMR_OVF_FLAG);} }/** brief exint4 interrupt handler* param none* retval none*/ void EXINT4_IRQHandler(void) {//检查外部中断标志位是否被设置if(exint_interrupt_flag_get(EXINT_LINE_4) ! RESET){at32_led_toggle(LED3);at32_led_toggle(LED4); // if(i 3) //三秒一次中断 // { // delay_us(5); // printf(3s counter: %d\r\n, num); // i 0; // }exint_flag_clear(EXINT_LINE_4);} }
相关文章
-
网站字体加载不出来怎么办wordpress 随机播放
网站字体加载不出来怎么办wordpress 随机播放
- 技术栈
- 2026年03月21日
-
网站字号怎么做电商卖东西
网站字号怎么做电商卖东西
- 技术栈
- 2026年03月21日
-
网站自助授权系统wordpress插件更新
网站自助授权系统wordpress插件更新
- 技术栈
- 2026年03月21日
-
网站综合营销方案设计简单的工作室网站模板
网站综合营销方案设计简单的工作室网站模板
- 技术栈
- 2026年03月21日
-
网站综合营销方案设计青州建网站
网站综合营销方案设计青州建网站
- 技术栈
- 2026年03月21日
-
网站租用价格常平小学网站建设
网站租用价格常平小学网站建设
- 技术栈
- 2026年03月21日
