你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教STM32F030K6复用功能选择问题

[复制链接]
huangjiayin 提问时间:2014-11-27 09:23 /
关于GPIOx_AFRL 和GPIOx_AFRH怎么用,参考手册没说明,一笔带过。比如,第27脚是PB4/SPI1_MISO/TIM3_CH1/EVENTOUT上电复位时,应该是PB4.是不是GPIOB_AFRL4=0X00?假如想复用 TIM3_CH1,GPIOB_AFRL4应该多少?
收藏 评论3 发布时间:2014-11-27 09:23

举报

3个回答
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[0] 这个指的是AFRL,GPIOB_AFR[1]  指的是AFRH,具体复用参考数据手册,你这是库没有仔细看,看的话,在GPIO结构结构体中都有。 记得,STM32 有两个手册,一个是参考手册,一个是数据手册。
Dylan疾风闪电 回答时间:2014-12-13 23:18:15
本帖最后由 Dylan疾风闪电 于 2014-12-13 23:27 编辑

直接看官方库函数和数据手册的值。具体的寄存器,通过代入常量计算获取。 未命名.JPG
//-------------------------------------------------------------
#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[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));
  temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
  GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
}

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版