当前位置:   article > 正文

STM32调用C库自带函数_stm32 指数运算

stm32 指数运算

在MDK5的安装路径中:D:\MDK5\ARM\ARMCC\include,可以看到很多C库头文件,在程序中只要包含了相应的头文件,编译器就会自动把相应的代码编译链接进去。


下面介绍在STM32可能会用到的函数:

 

include "math.h"

  1. 1、 三角函数
  2. double sin(double);正弦
  3. double cos(double);余弦
  4. double tan(double);正切
  5. 2、指数与对数
  6. double frexp(double value,int *exp);这是一个将value值拆分成小数部分f和(以2为底的)指数部分exp,并返回小数部分f,即f*2^exp。其中f取值在0.5~1.0范围或者0
  7. double ldexp(double x,int exp);这个函数刚好跟上面那个frexp函数功能相反,它的返回值是x*2^exp
  8. double modf(double value,double *iptr);拆分value值,返回它的小数部分,iptr指向整数部分。
  9. double log (double); 以e为底的对数
  10. double log10 (double);以10为底的对数
  11. double pow(double x,double y);计算x的y次幂
  12. float powf(float x,float y); 功能与pow一致,只是输入与输出皆为浮点数
  13. double exp (double);求取自然数e的幂
  14. double sqrt (double);开平方
  15. 3 、取整
  16. double ceil (double); 取上整,返回不比x小的最小整数
  17. double floor (double); 取下整,返回不比x大的最大整数
  18. 4 、绝对值
  19. int abs(int i); 求整型的绝对值
  20. double fabs (double);求实型的绝对值
  21. double cabs(struct complex znum);求复数的绝对值
  22. 5 、取整与取余,用/和%可代替
  23. double modf (double,double*); 将参数的整数部分通过指针回传,返回小数部分
  24. double fmod (double,double); 返回两参数相除的余数

include "stdio.h"

主要就是printf函数在串口上的应用:
以正点原子的程序模版为例:


usart.c中定义了把printf和串口一输出相关联的函数:

 

  1. //加入以下代码,支持printf函数,而不需要选择use MicroLIB
  2. #if 1
  3. #pragma import(__use_no_semihosting)
  4. //标准库需要的支持函数
  5. struct __FILE
  6. {
  7. int handle;
  8. };
  9. FILE __stdout;
  10. //定义_sys_exit()以避免使用半主机模式
  11. void _sys_exit(int x)
  12. {
  13. x = x;
  14. }
  15. //重定义fputc函数
  16. int fputc(int ch, FILE *f)
  17. {
  18. while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
  19. USART1->DR = (u8) ch;
  20. return ch;
  21. }
  22. #endif

如果你注释掉这段话,但程序上使用了 printf,虽然软件编译不会报错,但是硬件上 STM32 是无法启动的,这段代码最好不要去修改。

若要映射到其他串口,只要把上诉的USART1改为USARTX或UARTX(X表示其他串口号)
通过%d,%f,就可以通过输出变量值。
sprintf函数!!(非常灵活好用):

int sprintf( char *buffer, const char *format [, argument] ... );
  1. //把整数123打印成一个字符串保存在s中。
  2. sprintf(s, "%d", 123); //产生"123"
  3. 整数拼接。可以指定宽度,不足的左边补空格:
  4. sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
  5. 当然也可以左对齐:
  6. sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"
  7. 也可以按照16 进制打印:
  8. sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
  9. 还可以字符串拼接等等
  1. u8 *p;
  2. u8 res;
  3. p=mymalloc(SRAMIN,40);//申请40字节内存,SRAMIN表示内部内存池
  4. sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",WEATHER_SERVERIP,WEATHER_PORTNUM); //配置目标TCP服务器
  5. res = atk_8266_send_cmd(p,"OK",200);//连接到目标TCP服务器
  6. ...
  7. ...
  8. ...
  9. myfree(SRAMIN,p);//务必释放内存,防止内存泄露无法回收

这里内存申请很有用,有时候不申请时会乱码!

include "stdlib.h"

  1. //返回整数变元num的绝对值
  2. int abs(int num);
  3. //返回长整形num的绝对值。
  4. long labs(long int num);
  5. //把str指向的串转换为双精度浮点值,串中必须含合法的浮点数,否则返回值不确定。
  6. //串中的数可以由有效浮点数中的任何字符结束,如空白符、除句号外的标点符号和E或e之外的字符等。
  7. double atof(const char *str);
  8. //把str指向的串转换为整数(int)值。串中必须含合法整型数,否则返回值无定义。
  9. //串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。
  10. int atoi(const char *str);
  11. //把str指向的串转换为长整数(long int)值。串中必须含合法整型数,否则返回值无定义。
  12. //串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。
  13. long atol(const char *str);
  14. //产生伪随机数序列,每次它被调用时返回一个0到RAND_MAX间的整数。RAND_MAX值至少是32767。
  15. int rand(void);
  16. //为rand()生成的伪随机数序列设置起点。
  17. void srand(unsigned int seed);
  1. void* calloc (size_t, size_t); //分配内存, 并清零
  2. void* malloc (size_t); //分配内存
  3. void* realloc (void*, size_t); //重新分配内存, 返回新指针
  4. void free (void*); //释放内存

rand和srand函数用法:https://blog.csdn.net/xiaoxiongli/article/details/1667215



作者:X_xxieRiemann
链接:https://www.jianshu.com/p/bd58feb62dc0
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/454619
推荐阅读
相关标签
  

闽ICP备14008679号