huangjiayin 发表于 2014-11-27 09:23:58

请教STM32F030K6复用功能选择问题

关于GPIOx_AFRL 和GPIOx_AFRH怎么用,参考手册没说明,一笔带过。比如,第27脚是PB4/SPI1_MISO/TIM3_CH1/EVENTOUT上电复位时,应该是PB4.是不是GPIOB_AFRL4=0X00?假如想复用 TIM3_CH1,GPIOB_AFRL4应该多少?

huangjiayin 发表于 2014-11-27 11:18:35

添加GPIOB->AFRL =0X00;这条指令会报如下报警:
Struct <unnamed> has no field :AFRL",GPIOx_AFRL和GPIOx_AFRH,GPIOX_MODER等都是寄存器,定义GPIOB->MODER   = 0X55551655;则OK.
该怎么解决?Thanks

yvonn 发表于 2014-12-10 21:43:14

结构体没有,应该是 GPIOB_AFR 这个指的是AFRL,GPIOB_AFR指的是AFRH,具体复用参考数据手册,你这是库没有仔细看,看的话,在GPIO结构结构体中都有。 记得,STM32 有两个手册,一个是参考手册,一个是数据手册。

Dylan疾风闪电 发表于 2014-12-13 23:18:15

本帖最后由 Dylan疾风闪电 于 2014-12-13 23:27 编辑

直接看官方库函数和数据手册的值。具体的寄存器,通过代入常量计算获取。
//-------------------------------------------------------------
#define SetAF_TIM3_CH1                                      {GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_1);}
//-------------------------------------------------------------
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
{
uint32_t temp = 0x00;
uint32_t temp_2 = 0x00;

/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
assert_param(IS_GPIO_AF(GPIO_AF));

temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));
GPIOx->AFR &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));
temp_2 = GPIOx->AFR | temp;
GPIOx->AFR = temp_2;
}

页: [1]
查看完整版本: 请教STM32F030K6复用功能选择问题