完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是嵌入式系统和C编程的新手。我目前正在尝试使用STM32微控制器对PCB进行编程,以便在收到单个命令后控制8个风扇的阵列。即00001011将打开风扇5,7和8.总共有256种可能的组合,对每个单独的组合进行编程效率不高。 我正在考虑使用一个数组来实现这一点,如: fan_array[8] = {fan1, fan2, fan3, fan4, fan5, fan6, fan7, fan8};printf ("Input fan state"); // user would input binary number as shown abovescanf (%d, fan_array);这是否会根据输入到阵列中的二进制值将GPIO引脚设置为控制每个风扇的高电平值还是低电平?
|
|
相关推荐
7个回答
|
|
您可以尝试使用BSRR寄存器
|
|
|
|
bsrr寄存器是一个位数组,可以让您单独控制gpio引脚。
|
|
|
|
所以我一直在研究BSRR寄存器,这似乎是控制风扇的最佳方式。我知道设置代码的位是这样的:GPIOA - > BSRR =(1 << 5)将PA5设置为1.但是如果我输入一个命令,如10101011(这将打开风扇1, 3,5,7和8)我如何能够分离命令并将每个位分配给一个引脚?
|
|
|
|
您可能需要查看STM32Fxxx参考手册,BSRR部分。
|
|
|
|
如果将风扇连接到GPIO端口的8位,则可以将字节值直接写入端口,每个风扇仅响应其位。不需要任何花哨的软件。
|
|
|
|
scanf (%d, fan_array); 它将整数读入数组的第一个元素。scanf%d读入指向整数的指针。fan_array是指向第一个元素fan_array [0]的指针。 你可以“ 轻松地 ” 使用查找表做你想做的事......如果你知道你的指针。 // List element with pointer to GPIO object and pin number. typedef struct { GPIO_PORT *port; uint8_t pin } fan_pin_t; // List of fan ports and pint const fan_pin_t fan_pin_list[] = { {PORTA, 4}, {PORTC, 7}, ... {0,0} }; // Function to set fans based on bitmask. void set_fan(uint8_t command){ fan_pin_t *fp = fan_pin; // Load list pointer uint8_t mask = 1; // Load mask 00000001 while(fp->port != 0){ // While not element {0,0} if(command & mask){ fp->port->BSRR = (1< }else{ fp->port->BRR = (1< } mask <<= 1; // Left shift mask by 1 fp++; // Next element in list } } |
|
|
|
这是错误的fp-> port-> BRR =〜(1 << fp-> pin);
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2255 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2071 浏览 3 评论
4687 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2215 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2757 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 05:11 , Processed in 0.828573 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号