资讯详情

资讯详情

【官方原创】LAT1703 STM32C5 LL Cordic例程

1. 背景STM32C5已发布受到客户普遍关注。由于产品刚刚上市不久生态较其他系列欠完善有些例程在STM32CubeC5中还不可用譬如LL cordic。2. LL cordic例程移植这里以STM32CubeG4里的例程为源移植到NUCLEO-C5A3ZG平台。2.1. 测试环境1、硬件平台NUCLEO-C5A3ZG2、IDE : IAR 9.70.43、例程STM32Cube_FW_G4_V1.5.0\Projects\NUCLEOG474RE\Examples_LL\CORDIC\CORDIC_CosSin\Src2.2. 移植步骤1、以STM32Cube_SW_Package_C5_2.0.0-alpha.4.0\examples\ll\gpio工程为基础复制并重新命名为为STM32Cube_SW_Package_C5_2.0.0-alpha.4.0\examples\ll\gpio-cordic使用IAR打开工程GPIO。2、拷贝stm32cubeg4 ll cordic例程中的源文件main.c相关宏定义至当前工程main.c中即下面代码/* Pass/Fail Status */#define PASS 0#define FAIL 1/* Reference values in Q1.31 format */#define ANGLE_CORDIC (int32_t)0x10000000 /* pi/8 in CORDIC input angle mapping */#define ANGLE_LIB (int32_t)0x08000000 /* pi/8 in arm math lib input angle mapping */#define MODULUS (int32_t)0x7FFFFFFF /* 1 */#define COS_REF (int32_t)0x7641AF3C /* cos(pi/8) reference value */#define SIN_REF (int32_t)0x30FBC54D /* sin(pi/8) reference value */#define DELTA (int32_t)0x00001000 /* Max residual error for cos and sin, with 6 cycle precision: 2^-19 max residual error, ie 31-1912 LSB, ie 0x1000 */3、复制计算结果变量/* cos and sin results */int32_t cosOutput 0;int32_t sinOutput 0;4、实现cordic功能​​​​​uint32_t Check_Residual_Error(int32_t VarA, int32_t VarB, uint32_t MaxError);{uint32_t status PASS;if ((VarA - VarB) 0){if ((VarA - VarB) MaxError){status FAIL;}}else{if ((VarB - VarA) MaxError){ status FAIL; } } return status; } static void LL_cordic_calculate(void) { LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_CORDIC); /* Configure CORDIC peripheral */ LL_CORDIC_Config(CORDIC, LL_CORDIC_FUNCTION_COSINE, /* cosine function */ LL_CORDIC_PRECISION_6_CYCLE, /* max precision for q1.31 cosine */ LL_CORDIC_SCALING_FACTOR_0, /* no scale */ LL_CORDIC_NBWRITE_1, /* One input data: angle. Second input data (modulus) is 1 after cordic reset */ LL_CORDIC_NBREAD_2, /* Two output data: cosine, then sine */ LL_CORDIC_INWIDTH_32_BIT, /* q1.31 format for input data */ LL_CORDIC_OUTWIDTH_32_BIT); /* q1.31 format for output data */ /* Write angle */ LL_CORDIC_WriteData(CORDIC, ANGLE_CORDIC); /* Read cosine */ cosOutput (int32_t)LL_CORDIC_ReadData(CORDIC); /* Read sine */ sinOutput (int32_t)LL_CORDIC_ReadData(CORDIC); /* Check residual error on cosine and sine results */ if ((Check_Residual_Error(cosOutput, COS_REF, DELTA) FAIL) || (Check_Residual_Error(sinOutput, SIN_REF, DELTA) FAIL)) { error_handler(); } }3. 测试结果在main函数里调用LL_cordic_calculate并监视cosOutput和sinOutput并与参考值进行比较结果符合预期。4. 小结本文基于STM32C5平台实现了LL cordic例程。点击按钮下载《STM32C5 LL Cordic例程》原文档。重要通知 - 请仔细阅读意法半导体公司及其子公司 “ST”保留随时对 ST 产品和 / 或本文档进行变更的权利恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST销售条款。 买方自行负责对 ST 产品的选择和使用 ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财产。 本文档是ST中国本地团队的技术性文章旨在交流与分享并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档包括代码电路图等信息 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →