c语言中怎样统计字符串中包含英文字母的个数?c语言中要统计字符串中包含英文字母的个数可以参考以下内容:main(){char str[100],*p;int num[4],i;p=str;gets(str);for(i=0;i
STM32H743调试时Stm32_Clock_Init(160,5,2,4)通不过
STM32程序编译出现错误,请各位帮忙
STM32程序编译出现错误,是设置错误造成的,解决方法如下:
1、首先打开STM32 ST-LINK Utility,依次选择“File ->Open File...”或者按快捷键“CTRL + O”准备打开一个烧录文件。
2、找到需要烧录的HEX文件,选择“打开”。
3、软件会将该HEX文件加载到窗口,同时会在下面的消息框显示文件的校验码。
4、然后点击菜单栏的“Target ->Connect”开始连接目标。
5、开始连接目标,成功后会在软件工具栏左侧显示目标芯片信息,同时会在下面的消息框进行相关提示。
STM32中断实验了该怎么办?
具体情况具体对待,你可以看我下面的实验对号入座来分析你的问题:
实验目的:
当按键按下时,让PF10引脚的LED灯亮,
当按键再次按下时,让PF10引脚的LED灯灭;
无论按下与否,PF9引脚的LED灯循环闪烁;
实验步骤:
实验程序:
[cpp]view plaincopy
/***********************************led.c*********************************/
#include"stm32f4xx.h"//在SYSTEM目录下可以找到
#include"sys.h"
voidLED_Init(void){
RCC->AHB1ENR=1<<5;//使能GPIO端口的F时钟
GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_25M,GPIO_PUPD_PU);
PFout(9)=1;
PFout(10)=1;
}
/***********************************led.h*********************************/
#ifndef_LED_H
#define_LED_H
voidLED_Init(void);
#endif
/********************************************key.c***************************************/
#include"sys.h"
voidKey_Init(void){
RCC->AHB1ENR|=1<<4;//使能PORTE时钟
//voidGPIO_Set(GPIO_TypeDef*GPIOx,u32BITx,u32MODE,u32OTYPE,u32OSPEED,u32PUPD);//GPIO设置函数
GPIO_Set(GPIOE,PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);//PE3设置上拉输入,这样的话,
//当按键没有按下时,默认电平为高;
}
/********************************************key.h***************************************/
#ifndef_KEY_H
#define_KEY_H
voidKey_Init(void);
#endif
/************************************exti.c********************************/
#include"sys.h"
#include"delay.h"
#include"stm32f4xx.h"
/*
本示例的作用就是,
当按键按下时,蜂鸣器发出声音,
当按键再次按下时,蜂鸣器静音;
*/
/*
中断初始化函数:
主要是关于寄存器的相关配置
*/
voidEXTI3_Init(void){
//方法一:
RCC->APB2ENR|=1<<14;//开启SYSCFG时钟
SYSCFG->EXTICR[0]|=0x4<<12;//设置IO口与中断线的映射关系;
EXTI->IMR|=1<<3;//开启对应中断线上的中断
EXTI->FTSR|=1<<3;//设置中断触发条件
//SCB和NVIC,可参考STM32F3与STM32F4系列CortexM4内核编程手册.pdf
SCB->AIRCR|=0x5<<8;//设置分组
NVIC->IP[9]|=0;//设置优先级,具体可分析MY_NVIC_Init()函数;
NVIC->ISER[0]|=1<<9;//使能中断;
//方法二:
/************************************
使用SYSTEM目录下提供的API来实现,
具体可参考正点原子示例
************************************/
}
voidEXTI3_IRQHandler(void){
/*
此按键,在按键按下时,处理不是很到位,
有待进一步改进,主要是在连按那一个环节。
*/
delay_ms(20);//消抖
if(PEin(3)==0){
PFout(10)=!PFout(10);
}
/*
在中断里边最后记得清中断:
*/
EXTI->PR|=1<<3;
}
/*************************************exti.h*******************************/
#ifndef_EXTI_H
#define_EXTI_H
voidEXTI3_Init(void);
#endif
/*************************************test.c*******************************/
#include"sys.h"
#include"delay.h"
#include"key.h"
#include"beep.h"
#include"exti.h"
#include"led.h"
//inti=0;
intmain(void){
Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
delay_init(168);//初始化延时函数
Beep_Init();
Key_Init();
EXTI3_Init();
LED_Init();
while(1){
PFout(9)=0;
delay_ms(500);
PFout(9)=1;
delay_ms(500);
}
}
typedefstruct
{
__IOuint32_tMEMRMP;/*!
__IOuint32_tPMC;/*!
__IOuint32_tEXTICR[4];/*!
uint32_tRESERVED[2];/*!
__IOuint32_tCMPCR;/*!
SYSCFG_TypeDef;
typedefstruct
{
__Iuint32_tCPUID;/*!
__IOuint32_tICSR;/*!
__IOuint32_tVTOR;/*!
__IOuint32_tAIRCR;/*!
__IOuint32_tSCR;/*!
__IOuint32_tCCR;/*!
__IOuint8_tSHP[12];/*!
__IOuint32_tSHCSR;/*!
__IOuint32_tCFSR;/*!
__IOuint32_tHFSR;/*!
__IOuint32_tDFSR;/*!
__IOuint32_tMMFAR;/*!
__IOuint32_tBFAR;/*!
__IOuint32_tAFSR;/*!
__Iuint32_tPFR[2];/*!
__Iuint32_tDFR;/*!
__Iuint32_tADR;/*!
__Iuint32_tMMFR[4];/*!
__Iuint32_tISAR[5];/*!
uint32_tRESERVED0[5];
__IOuint32_tCPACR;/*!
}SCB_Type;
所以,在这里,我们把这条语句写成了SCB->AIRCR |= 0x5 << 8;
[cpp]view plaincopy
[cpp]view plaincopy
[cpp]view plaincopy
[cpp]view plaincopy
[cpp]view plaincopy
[cpp]view plaincopy
实验分析:
我们主要分析一下exti.c中的寄存器设置的这几个步骤:
1. RCC->APB2ENR |= 1 << 14;
这一步的作用就是使能SYSCFG时钟,
在使用外部中断的时候一定要先使能SYSCFG时钟;
2. SYSCFG->EXTICR[0] |= 0x4 << 12;
这一步的作用就是设置IO口与中断线的映射关系;
那么问题来了,我如何知道的我的IO口与哪根中断线是关联起来的呢?
而我们是通过KEY1按键,对应的IO口就是PE3,所以由上图的映射关系,我们知道,我们应该选择中断线3与之对应;
在官方提供的头文件stm32f4xx.h中,我们可以看到:
[cpp]view plaincopy
[cpp]view plaincopy
结合上述三幅图,我们可以得知:
由于PE3对应的中断线为EXTI3,所以,我们我们这里仅需配置EXTI3,而EXTI3是在SYSCFG_EXTICR1中的;
所以我们仅需配置SYSCFG_EXTICR1寄存器的12位-15位为0100,而SYSCFG_EXTICR1寄存器在配置文件中,
对应的是SYSCFG->EXTICR[0],所以我们就写成了SYSCFG->EXTICR[0] |= 0x4 << 12;
3. EXTI->IMR |= 1 << 3;
这条语句的作用就是:开启对应中断线上的中断
由于我们操作的中断线是EXTI3,而IMR寄存器各位解释如下:
所以对应的,我们操作EXTI_IMR寄存器的第3位MR3即可;
所以这条语句就写成了:EXTI->IMR |= 1 << 3
4. EXTI->FTSR |= 1 << 3;
这条语句的作用就是设置中断触发条件;
在我的开发板中,当按键按下时,其端口就会变成低电平,在没有按下时,其是为高电平的;
因为我们key.c中,将按键的引脚设置成了上拉;所以在这里,我得将其设置成下降沿触发;
与此同时,查看EXTI_FTSR寄存器,可以看到:
又由于我们这条中断线是中断线3,所以这条语句就写成了:EXTI->FTSR |= 1 << 3
5. SCB->AIRCR |= 0x5 << 8;
这条语句的作用就是:设置分组;
所以,在这里我们只需设置SCB的AIRCR的 bit10-8即可;查看SCB的结构体,得知:
[cpp]view plaincopy
亦即设置成了101,也就是抢占优先级占2位,响应优先级占2位;
注:抢占优先级和响应优先级一样,其值越低则表示其优先级越高;
上述说的子优先级也就是我们说的响应优先级;
6. NVIC->IP[9] |= 0;
有上条语句,我们可以得知:IP寄存器由240个8bit的寄存器组成,每个可屏蔽中断占用8bit,这样总共可以表示240个可屏蔽中断,
而STM32F4只用到了其中的82个。IP[81]~IP[0]分别对应中断81~0.而每个可屏蔽中断占用的8bit并没有全部使用,而是只用了高4位;
这4位,又分为抢占优先级和响应优先级;抢占优先级在前,响应优先级在后;也就是说,抢占优先级在高位,响应优先级在低位;
而我们又知道:我们这个中断是外部中断3,所以查看中断向量表可知:
由此可知,EXTI3在中断的位置为9,所以我们只需要设置NVIC->IP[9] 即可;
在这里我们把NVIC->IP[9] |= 0;则表示,我们设置外部中断3的抢占优先级为0,响应优先级也为0,其各占2位;
7. NVIC->ISER[0] |= 1 << 9;
这一步的作用就是使能中断;
ISER是一个中断使能寄存器组;这里用8个32位寄存器来控制,每个位控制一个中断;但是STM32F4的可屏蔽中断
最多只有82个,所以对我们来说,有用的就是三个(ISER[0~2]),总共可以表示96个中断;而STM32F4只用了其中的
前82个中断,ISER[0]的0bit~31分别对应中断0~31;ISER[1]的bit0~32对应中断32~63;ISER[2]的bit0~32对应中断64~81;
在这里,我们知道:我们的EXTI3对应的中断的位置是9,所以我们只需设置ISER[0]的第9位即可;所以我们在这里就将这条
语句写成了:NVIC->ISER[0] |= 1 << 9;
8.至于外部中断函数的名称如何编写,我们可以从启动文件中去找到;
当我们设置的外部中断函数与启动文件中定义的名称一致时,
那么当这个中断条件满足时,就会去中断函数里边执行其函数体;
我们只需要在中断发生后,记得清中断,防止中断重复发生;
注意事项:
在本实验中,关于按键处理那一块,处理不是很到位,
主要应该是处在连按这一块,暂时没去整它,待我需要时,再去整整。
转载于 http://blog.csdn.net/u010661782/article/details/50281229,感谢原作者非常详细的指导学习。
STM32 中断初识
前段时间经常用stm32f4 discovery,但是因为对NVIC , EXTI不是很了解,所以使用的过程中一直都在避免使用中断,这两天没什么事决定来学习一下stm32 的中断,写一下自己的心得,如有谬误之处,欢迎指正。
我把用到的几份文档寄存器的文档(RM0090)、《Cortex-M技术参考手册》、《Cortex™-M4 Devices Generic User Guide》、《ARMv7-M Architecture Reference Manual》放在百度云,需要的自取
stm32固件库中delay_ms函数,以及stm32_clock_init(u8 Pll)函数的位置
delay_ms只是延时,格式如delay_ms(500);表示延时0.5秒。stm32_clock_init(u8 Pll)函数是系统时钟设置,比如 Stm32_Clock_Init(9); //系统时钟设置9倍频,一般放在主函数的位置中。STM32单片机入门 寄存器版 跑马灯不亮
//delay_ms(300); //GPIOB->ODR &= ~(1<<5); //GPIOE->ODR &= ~(1<<5); //delay_ms(300); 看看led能否被点亮,如果不能,就是你的初始化配置有问题,可找原子的不完全手册。 如果能点亮,delay_ms(300);延时不够,加大一点,比如3000,30000STM32 RCC系统初始化失败 单片机跑不起来
/* Flash 2 wait state */ //FLASH_SetLatency(FLASH_Latency_2); /* Enable Prefetch Buffer */ //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 不能被注释掉,这是在配置flash的等待周期,48 MHz < SYSCLK ≤ 72 MHz 时是需要有两个等待周期得,否则flash有可能进入写保护,详细请看St的STM32F10xxx Flash programming这个文档,其中FLASH_ACR寄存器的最低3位就是配置等待周期的,这是必须要配相关文章
- 详细阅读
-
新代系统数控车?这个外圆弧跟内弧详细阅读
圆弧在数控车床上怎么编程?圆弧插补指令G02/G03 圆弧插补指令命令刀具在指定平面内按给定的F进给速度作圆弧运动,切削出圆弧轮廓。 (一)圆弧顺逆的判断 圆弧插补指令分为顺时针
-
图形化编程怎么载入角色的造型详细阅读
在scratch软件中,怎么设置a角色碰到了b角色的某个造型假如a角色是小马,b是小老虎,首先我们先看看小老虎的代码,在两个碰到了以后,将当前造型编号放到变量当中然后看小马这边就可
-
花钟的A6信息技术的作用详细阅读
信息技术的作用信息技术的作用主要体现在以下几个方面: (1)推动经济的增长。在生产领域推广信息技术,可以改善劳动条件,扩大生产能力, 提高产品质量,增加经济效益。信息技术的发展,
-
南海信息技术学院狮山校区的电话。详细阅读
南海信息技术学校狮山校区的咨询电话?Tel:0757-85588786/85588710(大沥教务处) 86685603(狮山教务处)佛山的高中技校有哪几间?国家重点.. 一.佛山高级技工学校咯 有四个校区...
-
八年级上册信息技术 书本上的题详细阅读
八年级上册信息技术复习提纲2009学年海珠区八年级上学期信息技术期末测试题 学校: 班别: 姓名: 学号: 成绩: 1课时完成 一、选择题(每题2.5分,共50分) 1. 对于计算机网络,以下说法正
-
windows10编程打开还是原来界面怎详细阅读
我的win10开始界面编程这样了,求大神告知怎么修改回正常的样子您可以打开开始菜单,点击“设置”,在弹出的页面中点击“个性化”,选择“开始”选项卡,将“使用全屏幕开始菜单”项
-
信息技术C++题求助详细阅读
信息技术,我感觉这道题应该是C吧?答案的确是C。 简单分析下: \是除法取整运算,Mod是除法取余运算。 N\10的结果剔除了个位,这个结果再除以10取余算出的就是十位上的数字了。 比如
-
找一位java编程高手,编写一个简单的详细阅读
JAVA通讯录 求一个JAVA编写的通讯录,基本的就可以。具体方法如下:1、定义封装一条记录的实体类2、根据实际系统容量,定义一个数组3、完成系统中显示全部记录的逻辑4、完成系统
- 详细阅读