论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-10-19 11:38:10
|
显示全部楼层
本帖最后由 likunxue 于 2016-10-21 21:39 编辑
其实我个人觉得, 配置是配置, 操作是操作, 这点你要自已去分清楚,
比如以下代码, 是使用位操用的一种方法, 但可以用于不同的地方
根据原子哥提供的寄存器板本代码, 在SYS.H文件中加发以下宏义
#define BIT_ADM(addr,bitnum) MEM_ADDR(BITBAND(((u32)&(addr)),(bitnum)))
这个宏其实就是STM32的位操作
用于配置寄存器时可以这么使用
以下代码配置定时器1的PA11实现输入捕获
void TIM1_IRD_StartWork_int(void)
{
BIT_ADM(RCC->APB2ENR,11) = 1; //TIM1时钟使能
TIM1->ARR = ENCODER_PERIOD; //设定计数器自动重装值
TIM1->PSC = 2; //预分频器36,得到1MHZ的计数时钟
BIT_ADM(TIM1->CCMR2,15) = 0; //IC4F = 0100; N=6 配置输入捕获2滤波
BIT_ADM(TIM1->CCMR2,14) = 1;
BIT_ADM(TIM1->CCMR2,13) = 0;
BIT_ADM(TIM1->CCMR2,12) = 0;
BIT_ADM(TIM1->CCMR2,11) = 0; //IC4PSC = 00;不分频
BIT_ADM(TIM1->CCMR2,10) = 0;
BIT_ADM(TIM1->CCMR2, 9) = 0; //CC4S = 10;选择输入端口IC4映谢到 TI3上
BIT_ADM(TIM1->CCMR2, 8) = 1;
BIT_ADM(TIM1->CCER, 12) = 1; //OC4 输入捕获使能
BIT_ADM(TIM1->CCER, 13) = 0; //高电平有效P =0;
BIT_ADM(TIM1->DIER, 4) = 1; //充许捕获4中断
BIT_ADM(TIM1->DIER, 0) = 1; //定时器更新中断使能
MY_NVIC_Init(2,0,TIM1_UP_IRQn,4); //抢占3,子优先级0,组4
BIT_ADM(TIM1->CR1,0)=1; //使能定时器1
}
如 以配置好PB10为输出, 想使能输出是高是低, 以以这样使用
BIT_ADM(GPIOB->ODR,10) = 1; //PB10输出高电平
BIT_ADM(GPIOB->ODR,10) = 0; //PB10输出低电平
如果配好PB10为输入 可以这样读取PB10的平状态,
X = BIT_ADM(GPIOB->IDR,10);
以上这些都是基于STM32的位操作, 的一种方式, 看你乍去理解.
|
|