新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2022-8-25
- 在线时间
- 7 小时
|
1金钱
int main(void)
{
u16 len;
u16 t;
u16 value;
u16 pwm;
u16 i;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
TIM3_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz
while(1)
{
delay_ms(10);
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
// printf("\r\n您发送的消息为:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
value=((USART_RX_BUF[0]-'0')*100+(USART_RX_BUF[1]-'0')*10+(USART_RX_BUF[2]-'0'));//
// value=(USART_RX_BUF[0]);
pwm=value;
TIM_SetCompare2(TIM3,pwm);//pwm函数给定时器
}
}
}
value=(USART_RX_BUF[0]);用串口输入0至8时(十进制),单片机led灯可以由暗至亮
value=((USART_RX_BUF[0]-'0')*100+(USART_RX_BUF[1]-'0')*10+(USART_RX_BUF[2]-'0'));//这种方法是可以接收长数,但是存在问题:用串口助手输入0至100时(十进制),单片机led灯可以由暗至亮(但是8比18、28、38、48、58、68、78都亮)
求教,如何写才能实现串口助手值输入0值100时(十进制数),led灯由暗至亮一点点变化
|
最佳答案
查看完整内容[请看2#楼]
value=((USART_RX_BUF[0]-'0')*100+(USART_RX_BUF[1]-'0')*10+(USART_RX_BUF[2]-'0'));
输入1个字符时,这个字符是存在USART_RX_BUF[0]的,[1]与[2]里的数是未知的,所以算法不对。
所以,需要根据len来判断收到几个字符就用几个字符作运算。
例1:
例2:
|