完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在MDK5的安装路径中:D:MDK5ARMARMCCinclude,可以看到很多C库头文件,在程序中只要包含了相应的头文件,编译器就会自动把相应的代码编译链接进去。
下面介绍在STM32可能会用到的函数: include "math.h" 1、 三角函数 double sin(double);正弦 double cos(double);余弦 double tan(double);正切 2、指数与对数 double frexp(double value,int *exp);这是一个将value值拆分成小数部分f和(以2为底的)指数部分exp,并返回小数部分f,即f*2^exp。其中f取值在0.5~1.0范围或者0。 double ldexp(double x,int exp);这个函数刚好跟上面那个frexp函数功能相反,它的返回值是x*2^exp double modf(double value,double *iptr);拆分value值,返回它的小数部分,iptr指向整数部分。 double log (double); 以e为底的对数 double log10 (double);以10为底的对数 double pow(double x,double y);计算x的y次幂 float powf(float x,float y); 功能与pow一致,只是输入与输出皆为浮点数 double exp (double);求取自然数e的幂 double sqrt (double);开平方 3 、取整 double ceil (double); 取上整,返回不比x小的最小整数 double floor (double); 取下整,返回不比x大的最大整数 4 、绝对值 int abs(int i); 求整型的绝对值 double fabs (double);求实型的绝对值 double cabs(struct complex znum);求复数的绝对值 5 、取整与取余,用/和%可代替 double modf (double,double*); 将参数的整数部分通过指针回传,返回小数部分 double fmod (double,double); 返回两参数相除的余数 include "stdio.h" 主要就是printf函数在串口上的应用: 以正点原子的程序模版为例: 在usart.c中定义了把printf和串口一输出相关联的函数: //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) { x = x; } //重定义fputc函数 int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (u8) ch; return ch; } #endif 如果你注释掉这段话,但程序上使用了 printf,虽然软件编译不会报错,但是硬件上 STM32 是无法启动的,这段代码最好不要去修改。 若要映射到其他串口,只要把上诉的USART1改为USARTX或UARTX(X表示其他串口号) 通过%d,%f,就可以通过输出变量值。 sprintf函数!!(非常灵活好用): int sprintf( char *buffer, const char *format [, argument] ... );//把整数123打印成一个字符串保存在s中。sprintf(s, "%d", 123); //产生"123"整数拼接。可以指定宽度,不足的左边补空格:sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"当然也可以左对齐:sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"也可以按照16 进制打印: sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐还可以字符串拼接等等u8 *p;u8 res;p=mymalloc(SRAMIN,40);//申请40字节内存,SRAMIN表示内部内存池sprintf((char*)p,"AT+CIPSTART="TCP","%s",%s",WEATHER_SERVERIP,WEATHER_PORTNUM); //配置目标TCP服务器res = atk_8266_send_cmd(p,"OK",200);//连接到目标TCP服务器.........myfree(SRAMIN,p);//务必释放内存,防止内存泄露无法回收这里内存申请很有用,有时候不申请时会乱码! include "stdlib.h" //返回整数变元num的绝对值int abs(int num);//返回长整形num的绝对值。long labs(long int num);//把str指向的串转换为双精度浮点值,串中必须含合法的浮点数,否则返回值不确定。//串中的数可以由有效浮点数中的任何字符结束,如空白符、除句号外的标点符号和E或e之外的字符等。double atof(const char *str);//把str指向的串转换为整数(int)值。串中必须含合法整型数,否则返回值无定义。//串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。int atoi(const char *str);//把str指向的串转换为长整数(long int)值。串中必须含合法整型数,否则返回值无定义。//串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。long atol(const char *str);//产生伪随机数序列,每次它被调用时返回一个0到RAND_MAX间的整数。RAND_MAX值至少是32767。int rand(void);//为rand()生成的伪随机数序列设置起点。void srand(unsigned int seed);void* calloc (size_t, size_t); //分配内存, 并清零void* malloc (size_t); //分配内存void* realloc (void*, size_t); //重新分配内存, 返回新指针void free (void*); //释放内存 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1865浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
647浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
517浏览 3评论
534浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 06:16 , Processed in 0.572310 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号