OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2637|回复: 10

如何让串口,ADC还有PWM三者一起正常运行

[复制链接]

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2020-5-14
在线时间
18 小时
发表于 2020-7-7 17:35:41 | 显示全部楼层 |阅读模式
最近在玩蓝牙控灯,用蓝牙接受手机发送的指令控制单片机做出相应的操作,比如手机发送一个指令,然后单片机可以使用ADC来通过采集的电压变化(比如一个光敏电阻)来输入给pwm在LED上输出显示。
现在遇到的问题是把ADC写入蓝牙指令后ADC采集不了电压了  LED灯直接变亮, 但是写在外面是可以实现ADC和PWM的LED亮度变化,。我要怎么操作才能用蓝牙让三者可以正常工作啊   
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2020-5-14
在线时间
18 小时
 楼主| 发表于 2020-7-7 17:41:23 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2019-11-3
在线时间
32 小时
发表于 2020-7-7 18:07:04 | 显示全部楼层
什么叫“ADC写入蓝牙指令后ADC采集不了电压了 。。。。。, 但是写在外面是可以实现ADC和PWM的LED亮度变化”?用的蓝牙转串口?串口服务锁死了?
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2020-5-14
在线时间
18 小时
 楼主| 发表于 2020-7-7 18:13:37 | 显示全部楼层
ericyang 发表于 2020-7-7 18:07
什么叫“ADC写入蓝牙指令后ADC采集不了电压了 。。。。。, 但是写在外面是可以实现ADC和PWM的LED亮度变化 ...

if( USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
        {
                //½ÓÊÕÊý¾Ýº¯Êý
                d = USART_ReceiveData(USART1);
                        while(d=='k'){printf("d = %c\r\n", d);
                  value1 = Get_Adc_Average(ADC_Channel_1,10);
                  value1 = value1;
                  TIM_SetCompare3(TIM3,value1);                }
        }       
        }
         这是写里面
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2020-5-14
在线时间
18 小时
 楼主| 发表于 2020-7-7 18:14:06 | 显示全部楼层
ericyang 发表于 2020-7-7 18:07
什么叫“ADC写入蓝牙指令后ADC采集不了电压了 。。。。。, 但是写在外面是可以实现ADC和PWM的LED亮度变化 ...

        u16 value = 0;        //¹âÃôµÄ±äÁ¿
                u16 value1 = 0;        //¹âÃôµÄ±äÁ¿
                  value = Get_Adc_Average(ADC_Channel_2,10);
                  value = value;
                  TIM_SetCompare3(TIM3,value);       
                这是写外面
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2020-5-14
在线时间
18 小时
 楼主| 发表于 2020-7-7 18:15:40 | 显示全部楼层
stm32c8t6
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2020-5-14
在线时间
18 小时
 楼主| 发表于 2020-7-7 18:56:06 | 显示全部楼层

!!!!!!!!
回复 支持 反对

使用道具 举报

1

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2019-3-5
在线时间
42 小时
发表于 2020-7-7 22:12:36 | 显示全部楼层
试试用ADC的DMA模式
回复 支持 反对

使用道具 举报

10

主题

161

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2019-9-5
在线时间
134 小时
发表于 2020-7-8 08:53:05 | 显示全部楼层
ADC用中断采集的吧?中断里面用中断容易出错
回复 支持 反对

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1437
金钱
1437
注册时间
2020-5-12
在线时间
395 小时
发表于 2020-7-8 10:15:04 | 显示全部楼层
我一般不用中断嵌中断这种做法。我的做法在串口中断收到对应的指令后给标识,然后根据标识在main里面处理。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2019-11-3
在线时间
32 小时
发表于 2020-7-9 13:52:30 | 显示全部楼层
火炭弟弟 发表于 2020-7-7 18:14
u16 value = 0;        //¹âÃôµÄ±äÁ¿
                u16  ...

中断函数中调用printf是不可重入的,在中断中嵌套其它中断源的处理也是有风险的。可以先试试屏蔽掉printf能不能跑。最好程序结构改成前后台方式,既中断设置标志状态,主循环处理
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 15:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表