打印
[STM8]

求个单片机

[复制链接]
926|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizye|  楼主 | 2017-8-27 19:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求个单片机  pwm通道多的  最好 定时器多   这样pwm的频率变化就多  pwm 最少10个以上吧  定时器3个以上吧  谁能给推荐下  最好还能便宜点
沙发
zhanghqi| | 2017-8-27 19:15 | 只看该作者
贴上主程序的源码,方便大神们指导,uint8_t   data2[512]这里定义超过512的话,程序下到STM32里,PC就不识别STM32的USB了
#include "main.h"
#include "usart.h"
#include "usb_lib.h"
#include "hw_config.h"
#include "usbio.h"
extern volatile uint32_t EP1_ReceivedCount;
extern volatile uint32_t EP2_ReceivedCount;

int main(void)
{
  uint16_t  data[256],index;
        uint8_t   data2[512],PacketN,PacketM;
        uint16_t num = 0;
        uint16_t i=0,j=0;
        Set_System();//系统时钟初始化

        USB_Interrupts_Config();
        Set_USBClock();
        USB_Init();
  
        for(i=0;i<256;i++)
        {
                data[i] = i+256;
        }
        for(i=0,j=0;j<256;j++)
        {
                 data2[i] = (uint8_t)(data[j] & 0x00ff);
                 data2[i+1] = (uint8_t)((data[j] >> 8)&0x00ff);
                 i=i+2;               
        }
        PacketN = 8;
        PacketM = 0;
        index = 0;



        while(1)
        {               
                        if(EP1_ReceivedCount > 0)
                        {
                                for(acketN>0acketN--)
                                {
                                        while(EP_TX_NAK!=GetEPTxStatus(ENDP1));                                        //等待硬件置位端点为EP_TX_NAK(这一条语句很重要)
                                        UserToPMABufferCopy(&data2[index],ENDP1_TXADDR,64);
                                        SetEPTxCount(ENDP1, 64);
                                        SetEPTxValid(ENDP1);
                                        index+=64;
                                }

                                if(PacketM!=0)                                                                           //如果不是64的倍数,就要发送剩余的数据
                                {
                                        while(EP_TX_NAK!=GetEPTxStatus(ENDP1));                                        //等待硬件置位端点为EP_TX_NAK(这一条语句很重要)
                                        UserToPMABufferCopy(&data2[index],ENDP1_TXADDR,PacketM);
                                        SetEPTxCount(ENDP1, PacketM);
                                        SetEPTxValid(ENDP1);         
                                }
                                else                                                                                           //如果是64的倍数,则需要再发一0长度的包
                                {
                                        while(EP_TX_NAK!=GetEPTxStatus(ENDP1));                                        //等待硬件置位端点为EP_TX_NAK
                                        UserToPMABufferCopy(&data2[index],ENDP1_TXADDR,0);
                                        SetEPTxCount(ENDP1, 0);
                                        SetEPTxValid(ENDP1);
                                }
                                index=0;
            }
        }
        
}

使用特权

评论回复
板凳
heweibig| | 2017-8-27 19:16 | 只看该作者
太多了吧?我见过8个的,没仔细研究过pwm

使用特权

评论回复
地板
wuhany| | 2017-8-27 19:17 | 只看该作者
32f1的片子大部分都有8个定时器,其中6个都有4路PWM输出

使用特权

评论回复
5
shimx| | 2017-8-27 19:19 | 只看该作者
每个定时间一般都有几路的输出,但一个定时器只能设置一个频率

使用特权

评论回复
6
spark周| | 2017-8-27 19:21 | 只看该作者
楼主准备做什么,用这么多PWM

使用特权

评论回复
7
spark周| | 2017-8-27 19:23 | 只看该作者

用STM32好了,又差不了多少钱;

使用特权

评论回复
8
huangchui| | 2017-8-27 19:25 | 只看该作者
哈哈,就是不知道有没有十几个PWM的,如果有,我猜有16个的。

使用特权

评论回复
9
jiajs| | 2017-8-27 19:29 | 只看该作者
用STM32F7 系列,定时器真是太多了。

使用特权

评论回复
10
zhenykun| | 2017-8-27 19:31 | 只看该作者

8系列最多4个定时器,9个通道,望知悉

使用特权

评论回复
11
lizye|  楼主 | 2017-8-27 19:33 | 只看该作者
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
12
石村长| | 2017-10-26 17:22 | 只看该作者
讲具体点

使用特权

评论回复
13
天灵灵地灵灵| | 2017-10-26 21:35 | 只看该作者
那要看你嫌贵不嫌贵了,不嫌贵,搞个PIN多的封装的基本上都可以满足了。

使用特权

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

本版积分规则

852

主题

9757

帖子

2

粉丝