打印
[AT32F403/403A]

AT32F403ACCT替换STM32F303CCT

[复制链接]
1053|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
drifer|  楼主 | 2021-1-27 12:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AC, TI, AD, ADC
本帖最后由 drifer 于 2021-1-27 12:19 编辑

算是修改成功了,所以发一些函数替换关系, 修改注意点



1. TIM1.1 函数对应关系
STM32函数/结构体
AP32函数/结构体
备注
LL_TIM_DisableCounter(TIMx);
TMR_Cmd(TMRx, DISABLE);

LL_TIM_ClearFlag_UPDATE( TIMx );
TMR_ClearFlag(TMRx, TMR_FLAG_Update);

LL_TIM_SetCounter(TIMx,0);
TMR_SetCounter(TMRx, 0);

LL_TIM_SetAutoReload(TIMx, (uint32_t)halfperiod);
TMR_SetAutoreload(TMRx, (uint32_t)halfperiod);

LL_TIM_SetRepetitionCounter(TIMx, 1);
TMR_SetRepetitionCount(TMR_Type* TMRx, uint32_t repetitioncount)
这个函数需要自己仿着写一个
LL_TIM_OC_SetCompareCH1(TIMx, ((uint32_t)halfperiod / (uint32_t) 2));
TMR_SetCompare1/TMR_SetCompare2/TMR_SetCompare3

LL_TIM_EnableCounter(TIMx);
TMR_Cmd(TMRx, ENABLE);

LL_TIM_IsActiveFlag_UPDATE( TIMx )
TMR_GetFlagStatus(TMRx , TMR_FLAG_Update)

TIMx->BDTR |= LL_TIM_OSSI_ENABLE;
TMRx->BRKDT |= TMR_OSIMIState_Enable;

LL_TIM_EnableAllOutputs ( TIMx );
TMR_CtrlPWMOutputs(TMRx, ENABLE);

LL_TIM_DisableIT_UPDATE( TIMx );
TMR_INTConfig(TMRx,TMR_INT_Overflow,DISABLE);

LL_TIM_SetTriggerOutput
TMR_SelectOutputTrigger

__HAL_TIM_SET_COUNTER
TMR_SetCounter

LL_TIM_GetCounter
TMR_GetCounter





2. ADC2.1 函数对应关系
STM32函数/结构体
AP32函数/结构体
备注
LL_ADC_IsActiveFlag_JEOS(ADC2)
ADC_GetFlagStatus(ADC2, ADC_FLAG_JEC)

LL_ADC_ClearFlag_JEOS( ADC2 );
ADC_ClearFlag(ADC2, ADC_FLAG_JEC)

LL_ADC_IsEnabled


LL_ADC_DisableIT_EOC(regConv->regADC);
ADC_INTConfig(regConv->regADC, ADC_INT_EC, DISABLE);

LL_ADC_StartCalibration( regConv->regADC, LL_ADC_SINGLE_ENDED );
ADC_StartCalibration

LL_ADC_IsCalibrationOnGoing( regConv->regADC )
ADC_GetCalibrationStatus

LL_ADC_Enable
ADC_Ctrl(regConv->regADC, ENABLE);

LL_ADC_REG_SetSequencerLength( regConv->regADC, LL_ADC_REG_SEQ_SCAN_DISABLE );
regConv->regADC->RSQ1 &= ~ADC_RSQ1_LEN;

LL_ADC_SetChannelSamplingTime ( regConv->regADC, __LL_ADC_DECIMAL_NB_TO_CHANNEL(regConv->channel) ,regConv->samplingTime);









2.2 注入序列采样

AT32F403A的适配对象是STM32F103,所以和STM32F303还是有不少区别的,比如STM32F303的注入采样配置都在寄存器ADCx_JSQR里面,而STM32F103或者AT32F403A是在两个寄存器里面配置的。分别是ADC_CTRL2配置JEXT TRIG、 JEXSEL, 和寄存器ADC_JSQ配置JLEN、JSQx.

2.3 校准

STM32F303的ADC校准必须要ADON=0时执行,而AT32F403A的ADC校准必须在ADON=1的时候执行。

3. SYSTICK3.1 函数对应关系
STM32函数/结构体
AP32函数/结构体
备注
HAL_Delay(1)













4. DBGMCU
4.1 函数对应关系
STM32函数/结构体
AP32函数/结构体
备注














5. CAN
5.1 函数/结构体对应关系
STM32函数/结构体
AP32函数/结构体
备注
CAN_TxHeaderTypeDef
CanTxMsg
  • CanTxMsg多了一个数据数组uint8_t Data[8];
  • IDE变IDT
HAL_CAN_AddTxMessage
CAN_Transmit
修改CAN_Transmit的函数定义, 数据单独一个变量
CAN_HandleTypeDef
CAN_Type
CAN_HandleTypeDef大部分内容不使用.
HAL_CAN_Start
CAN_OperatingModeRequest(CAN_OperatingMode_Normal)
start就是进入normal模式
HAL_CAN_ActivateNotification
CAN_INTConfig

HAL_CAN_Stop
CAN_OperatingModeRequest(CAN_OperatingMode_Initialization)
stop就是进入initialization模式
HAL_CAN_ConfigFilter
CAN_FilterInit

HAL_CAN_GetTxMailboxesFreeLevel
AT_CAN_GetTxMailboxesFreeLevel
自己改写的
HAL_CAN_GetRxMessage
CAN_Receive
修改 CAN_Receive的函数定义, 数据单独一个变量
HAL_CAN_IRQHandler


__HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0);
CAN_ClearFlag(CANx,  CAN_FLAG_RQCP0);


6. IWDG
6.1 函数/结构体对应关系
STM32函数/结构体
AP32函数/结构体
备注
LL_IWDG_ReloadCounter(IWDG);  
IWDG_ReloadCounter()











7. GPIO

GPIO没有pull up pull down配置。AT系列里面,只有AT32F421才有。

7.1 函数/结构体对应关系
STM32函数/结构体
AP32函数/结构体
备注













8. SPI

SPI我使用的是SPI1,管脚是PA15/PB3/4/5。 这里有个需要注意的地方,AT32403A默认是开启JTAG功能的,这几个管脚默认配置给JTAG,相关说明可以在章节“JTAG/SWD复用功能重映射”里面看到,上电默认的SWJTAG_CONF[2:0]=0x00意味着PA13/14/15,PB3/4/5都不能当GPIO用,因为指定给JTAG使用了。

针对我的实际应用而言,JTAG可以关闭,SWD还得用。所以一上电,时钟配置后就需要修改这些管脚。

8.1 函数/结构体对应关系
STM32函数/结构体
AP32函数/结构体
备注















使用特权

评论回复
沙发
drifer|  楼主 | 2021-1-27 12:18 | 只看该作者
好乱...

使用特权

评论回复
板凳
muyichuan2012| | 2021-1-27 18:44 | 只看该作者
厉害,STM32F303都可以移植过来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝