GPIO_SetBits(GPIOC,GPIO_Pin_3)。
GPIO_ResetBits(GPIOC,GPIO_Pin_3)。
这些函数在GPIOC文件里有。
STM32代表ARM Cortex-M内核的32位微控制器,具有高性能,实时性强,低功耗,便于低电压 *** 作等优点,同时还易于开发。
按内核架构分,有STM32F103“增强型”系、STM32F101“基本型”系列、STM32F105、STM32F107“互联型”系列。其中增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。
两个系列都内置32K到128K的闪存,不同的是 SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于05mA/MHz。
在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。
内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、以最小的硬件变化来满足个性化的应用需求。
所有的中断函数都在启动汇编文件中声明了都是一些弱定义,说的白一点就是中断向量表,编译后把你定义的中断函数地址填进去。要用哪个中断直接重定义那个中断函数即可。stm32f10x_itc只是官方自己为了整齐重新写的一个C,中断函数可以在任何项目C文件中去定义。
systick的中断是系统开辟了的 对于他的配置建议看下core_m3h里面的SysTick_Config(uint32_t ticks)这个函数 调用这个函数以后 初始化状态就是 使用AHB ticks的值为VAL,也就是计数的滴答值,这个值减到了0就会中断,同时VAL值重新装填 还有 调用了函数以后,默认是开启了滴答计时器,所以要在调用函数之后关闭计时器,在要用的时候开启。对于滴答的开启与关闭是用寄存器做的
void config_gpio(u32 PORTx, u32 MODE, u32 PINxs, PULL_STAT stat)//PORTx=0,则代表GPIOA,类推。PINxs从0开始。MODE和stat见如下对照表,需要你自己实现PULL_STAT枚举型
{
/IO配置对照,4bit一个引脚(y)
高2位(CNFy):
输入 00=模拟,01=浮空,10=上/下拉,11=保留
输出 [推挽] [开漏]
[通用] 00 01
[复用] 10 11
低2位(MODEy):
输入 00
输出 01=10MHz,10=2MHz,11=50MHz
/
GPIO_TypeDef GPIOs[] = {GPIOA,GPIOB,GPIOC,GPIOD,GPIOE,GPIOF,GPIOG};
MODE|=stat<<2;
if(PINxs>15)
{
PINxs -= 8;
GPIOs[PORTx]->CRH = MODE<<(PINxs4);
}
else
{
GPIOs[PORTx]->CRL = MODE<<(PINxs4);
}
}
至于
void set_PINxs(u32 PORTx, u32 PINxs, PIN_VAL val){
}
可以用位带实现,如下:
保存为systemh
#ifndef __SYS_H#define __SYS_H
#include "stm32f10xh"
//0,不支持ucos
//1,支持ucos
#define SYSTEM_SUPPORT_UCOS 0 //定义系统文件夹是否支持UCOS
//位带 *** 作,实现51类似的GPIO控制功能
//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页)
//IO口 *** 作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) ((volatile unsigned long )(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//IO口地址映射
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
//IO口 *** 作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入
//void NVIC_Configuration(void);
#endif
使用时直接:
PAout(0) = 0;//或
a = PAin(0);
当然,你还可以使用STM32的库函数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)