1. 全金屬狂潮4什麼時候出啊
1樓就亂扯蛋吧,把全金1做的面目全非,和作者交惡的GONZO早混不下去了,從校園篇開始就是京阿尼負責了。這么多年京阿尼一直沒出全金無非幾個原因,一是小說後期劇情緊密性太強,難以故意拆分為季度制。二京阿尼人手不足,06~10年京阿尼做了涼宮,kanon,幸運星,clannad,KON等一系列名作。 現在再做FMP,估計要等小說出完才可能開工了。 況且京阿尼不會也不可能放棄全金這塊招牌
2. stm32f105定時器時鍾怎麼開tim1可以初始化完,但跑不進中斷函數裡面去,tim3後初始化都完成不了了
#include "can.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供學習使用,未經作者許可,不得用於其它任何用途
//ALIENTEK戰艦STM32開發板
//CAN驅動 代碼
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//修改日期:2012/9/11
//版本:V1.0
//版權所有,盜版必究.
//Copyright(C) 廣州市星翼電子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//CAN初始化
//tsjw:重新同步跳躍時間單元.范圍:1~3; CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
//tbs2:時間段2的時間單元.范圍:1~8;
//tbs1:時間段1的時間單元.范圍:1~16; CAN_BS1_1tq ~CAN_BS1_16tq
//brp :波特率分頻器.范圍:1~1024;(實際要加1,也就是1~1024) tq=(brp)*tpclk1
//注意以上參數任何一個都不能設為0,否則會亂.
//波特率=Fpclk1/((tsjw+tbs1+tbs2)*brp);
//mode:0,普通模式;1,回環模式;
//Fpclk1的時鍾在初始化的時候設置為36M,如果設置CAN_Normal_Init(1,8,7,5,1);
//則波特率為:36M/((1+8+7)*5)=450Kbps
//返回值:0,初始化OK;
// 其他,初始化失敗;
///////////////////////////////////////////////////CAN1////////////////////////////////////////////////////
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
#if CAN_RX0_INT_ENABLE
NVIC_InitTypeDef NVIC_InitStructure;
#endif
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能PORTD時鍾,使能功能復用時鍾
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1時鍾
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化IO
//GPIO_PinRemapConfig(GPIO_Remap2_CAN1,ENABLE);
//CAN單元設置
CAN_InitStructure.CAN_TTCM=DISABLE; //非時間觸發通信模式 //
CAN_InitStructure.CAN_ABOM=DISABLE; //軟體自動離線管理 //
CAN_InitStructure.CAN_AWUM=DISABLE; //睡眠模式通過軟體喚醒(清除CAN->MCR的SLEEP位)//
CAN_InitStructure.CAN_NART=ENABLE; //禁止報文自動傳送 //
CAN_InitStructure.CAN_RFLM=DISABLE; //報文不鎖定,新的覆蓋舊的 //
CAN_InitStructure.CAN_TXFP=DISABLE; //優先順序由報文標識符決定 //
CAN_InitStructure.CAN_Mode= mode; //模式設置: mode:0,普通模式;1,回環模式; //
//設置波特率
CAN_InitStructure.CAN_SJW=tsjw; //重新同步跳躍寬度(Tsjw)為tsjw+1個時間單位 CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1個時間單位CAN_BS1_1tq ~CAN_BS1_16tq
CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1個時間單位CAN_BS2_1tq ~ CAN_BS2_8tq
CAN_InitStructure.CAN_Prescaler=brp; //分頻系數(Fdiv)為brp+1 //
CAN_Init(CAN1, &CAN_InitStructure); // 初始化CAN1
CAN_FilterInitStructure.CAN_FilterNumber=0; //過濾器0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位ID
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//過濾器0關聯到FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活過濾器0
CAN_FilterInit(&CAN_FilterInitStructure);//濾波器初始化
#if CAN_RX0_INT_ENABLE
CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息掛號中斷允許.
NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主優先順序為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次優先順序為0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
return 0;
}
#if CAN_RX0_INT_ENABLE //使能RX0中斷
//中斷服務函數
void CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN1, 0, &RxMessage);
Can_Send_Msg(RxMessage.Data,8);
}
#endif
//can發送一組數據(固定格式:ID為0X12,標准幀,數據幀)
//len:數據長度(最大為8)
//msg:數據指針,最大為8個位元組.
//返回值:0,成功;
// 其他,失敗;
u8 Can_Send_Msg(u8* msg,u8 len)
{
u8 mbox;
u16 i=0;
CanTxMsg TxMessage;
TxMessage.StdId=0x12; // 標准標識符為0
TxMessage.ExtId=0x12; // 設置擴展標示符(29位)
TxMessage.IDE=0; // 使用擴展標識符
TxMessage.RTR=0; // 消息類型為數據幀,一幀8位
TxMessage.DLC=len; // 發送兩幀信息
for(i=0;i<8;i++)
TxMessage.Data[i]=msg[i]; // 第一幀信息
mbox= CAN_Transmit(CAN1, &TxMessage);
i=0;
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //等待發送結束
if(i>=0XFFF)return 1;
return 0;
}
//can口接收數據查詢
//buf:數據緩存區;
//返回值:0,無數據被收到;
// 其他,接收的數據長度;
u8 Can_Receive_Msg(u8 *buf)
{
u32 i;
CanRxMsg RxMessage;
if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0; //沒有接收到數據,直接退出
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//讀取數據
for(i=0;i<8;i++)
buf[i]=RxMessage.Data[i];
return RxMessage.DLC;
}
///////////////////////////////////////////////////CAN2////////////////////////////////////////////////////
u8 CAN2_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
#if CAN_RX2_INT_ENABLE
NVIC_InitTypeDef NVIC_InitStructure;
#endif
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);//使能PORTB時鍾
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);//使能CAN2時鍾
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化IO
//GPIO_PinRemapConfig(GPIO_Remap_CAN2,ENABLE);
//CAN單元設置
CAN_InitStructure.CAN_TTCM=DISABLE; //非時間觸發通信模式 //
CAN_InitStructure.CAN_ABOM=DISABLE; //軟體自動離線管理 //
CAN_InitStructure.CAN_AWUM=DISABLE; //睡眠模式通過軟體喚醒(清除CAN->MCR的SLEEP位)//
CAN_InitStructure.CAN_NART=ENABLE; //禁止報文自動傳送 //
CAN_InitStructure.CAN_RFLM=DISABLE; //報文不鎖定,新的覆蓋舊的 //
CAN_InitStructure.CAN_TXFP=DISABLE; //優先順序由報文標識符決定 //
CAN_InitStructure.CAN_Mode= CAN_Mode_Normal; //模式設置: mode:0,普通模式;1,回環模式; //
//設置波特率
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳躍寬度(Tsjw)為tsjw+1個時間單位 CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; //Tbs1=tbs1+1個時間單位CAN_BS1_1tq ~CAN_BS1_16tq
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;//Tbs2=tbs2+1個時間單位CAN_BS2_1tq ~ CAN_BS2_8tq
CAN_InitStructure.CAN_Prescaler=9; //分頻系數(Fdiv)為brp+1 //
CAN_Init(CAN2, &CAN_InitStructure); // 初始化CAN2
CAN_FilterInitStructure.CAN_FilterNumber=14; //過濾器0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位ID
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//過濾器0關聯到FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活過濾器0
CAN_FilterInit(&CAN_FilterInitStructure);//濾波器初始化
#if CAN_RX2_INT_ENABLE
CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);//FIFO0消息掛號中斷允許.
NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主優先順序為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次優先順序為0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
return 0;
}
#if CAN_RX2_INT_ENABLE //使能RX2中斷
//中斷服務函數
void CAN2_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN2, 0, &RxMessage);
Can2_Send_Msg(RxMessage.Data,8);
}
#endif
//can發送一組數據(固定格式:ID為0X12,標准幀,數據幀)
//len:數據長度(最大為8)
//msg:數據指針,最大為8個位元組.
//返回值:0,成功;
// 其他,失敗;
u8 Can2_Send_Msg(u8* msg,u8 len)
{
u8 mbox;
u16 i=0;
CanTxMsg TxMessage;
TxMessage.StdId=0x12; // 標准標識符為0
TxMessage.ExtId=0x12; // 設置擴展標示符(29位)
TxMessage.IDE=0; // 使用擴展標識符
TxMessage.RTR=0; // 消息類型為數據幀,一幀8位
TxMessage.DLC=len; // 發送兩幀信息
for(i=0;i<8;i++)
TxMessage.Data[i]=msg[i]; // 第一幀信息
mbox= CAN_Transmit(CAN2, &TxMessage);
i=0;
while((CAN_TransmitStatus(CAN2, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //等待發送結束
if(i>=0XFFF)return 1;
return 0;
}
//can口接收數據查詢
//buf:數據緩存區;
//返回值:0,無數據被收到;
// 其他,接收的數據長度;
u8 Can2_Receive_Msg(u8 *buf)
{
u32 i;
CanRxMsg RxMessage;
if( CAN_MessagePending(CAN2,CAN_FIFO0)==0)return 0; //沒有接收到數據,直接退出
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);//讀取數據
for(i=0;i<8;i++)
buf[i]=RxMessage.Data[i];
return RxMessage.DLC;
}
3. linux下切換用戶命令
su是在用戶間切換,可以是從普通用戶切換到root用戶,也可以是從root用戶切換到普通用戶。如果當前是root用戶,那麼切換成普通用戶test用以下命令。
su-test如果要切換回root用戶,那麼用以下命令。
su或su-用戶名root可以省略不寫。
切換回root用戶時要輸入root密碼。一般直接輸入exit命令來切換回root用戶,這樣就不用輸入密碼。
4. MB高達比例多少為什麼那麼貴
比例是1:100。成品,有金屬件都是次要的。主要還是專門的設定師,造型師兼修。比如海老川兼武(00,FMP,AGE主力設定師)、重田智(SEED系列),都是很有名的人物,風格也都很獨特。所以首先賣的就是造型師的名氣和設定,其次是合金零件的加入以及不具備量產、模具通用等方面的原因,而且是大比例。其實定位就類似於GIF系列或者現在的蘿卜魂VER.KA系列,借著KA爹的名聲和設定賺錢。當然也由於是特定的造型師只擁有一些特定的版權(或者說設定的擁有權),所以MB目前的定位也只有00和SEED!
5. 求首歌的下載地址和名字
26M 是個串燒 歌名不知道 要的話 留郵箱我發你
6. mp3轉換fmp;kmp;smp有絕招嗎
fmp;kmp;smp都是韓國手機專用音頻文件格式,看吧,明明手機賣你的時候說是mp3手機,可是,到家往裡面裝了一筒mp3就是不出聲,帶著疑問問廠商,回答說:為了防止侵犯版權,廠商不得已為之。這對韓國人來說是正常的,可是,我們中國人-東方的巨人、龍的傳人,不火冒三丈才怪,對此,放出答案,還望熱心網友轉貼告知:
韓國有個專門解決這類手機各品牌音視頻播放文件的轉換的軟體以及它的網站,需要注冊(免費的就行,關鍵是你能不能弄懂韓文),下載,安裝,啟動軟體之後,會員登陸,之後連接你的手機吧,彈出無usb驅動警示,順著它的指示自動尋找並安裝就可以,之後,重新連接手機(不用驗證手機)這下就可以解決mp3轉換的問題了,把你已經有的硬碟里的mp3文件拽到那個手機窗口,就okl.
7. pcl841按裝後做測試時can2發can1可收而can1發can2不能收是什麼問題
#include"can.h"#include"led.h"#include"delay.h"#include"usart.h"////////////////////////////////////////////////////////////////////////////////////本程序只供學習使用,未經作者許可,不得用於其它任何用途//ALIENTEK戰艦STM32開發板//CAN驅動代碼//正點原子@ALIENTEK//技術論壇://修改日期:2012/9/11//版本:V1.0//版權所有,盜版必究。//Copyright(C)廣州市星翼電子科技有限公司2009-2019//Allrightsreserved////////////////////////////////////////////////////////////////////////////////////CAN初始化//tsjw:重新同步跳躍時間單元.范圍:1~3;CAN_SJW_1tqCAN_SJW_2tqCAN_SJW_3tqCAN_SJW_4tq//tbs2:時間段2的時間單元.范圍:1~8;//tbs1:時間段1的時間單元.范圍:1~16;CAN_BS1_1tq~CAN_BS1_16tq//brp:波特率分頻器.范圍:1~1024;(實際要加1,也就是1~1024)tq=(brp)*tpclk1//注意以上參數任何一個都不能設為0,否則會亂.//波特率=Fpclk1/((tsjw+tbs1+tbs2)*brp);//mode:0,普通模式;1,回環模式;//Fpclk1的時鍾在初始化的時候設置為36M,如果設置CAN_Normal_Init(1,8,7,5,1);//則波特率為:36M/((1+8+7)*5)=450Kbps//返回值:0,初始化OK;//其他,初始化失敗;///////////////////////////////////////////////////CAN1////////////////////////////////////////////////////u8CAN_Mode_Init(u8tsjw,u8tbs2,u8tbs1,u16brp,u8mode){GPIO_InitTypeDefGPIO_InitStructure;CAN_InitTypeDefCAN_InitStructure;CAN_FilterInitTypeDefCAN_FilterInitStructure;#ifCAN_RX0_INT_ENABLENVIC_InitTypeDefNVIC_InitStructure;#endifRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能PORTD時鍾,使能功能復用時鍾RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);//使能CAN1時鍾GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化IOGPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉輸入GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化IO//GPIO_PinRemapConfig(GPIO_Remap2_CAN1,ENABLE);//CAN單元設置CAN_InitStructure.CAN_TTCM=DISABLE;//非時間觸發通信模式//CAN_InitStructure.CAN_ABOM=DISABLE;//軟體自動離線管理//CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通過軟體喚醒(清除CAN->MCR的SLEEP位)//CAN_InitStructure.CAN_NART=ENABLE;//禁止報文自動傳送//CAN_InitStructure.CAN_RFLM=DISABLE;//報文不鎖定,新的覆蓋舊的//CAN_InitStructure.CAN_TXFP=DISABLE;//優先順序由報文標識符決定//CAN_InitStructure.CAN_Mode=mode;//模式設置:mode:0,普通模式;1,回環模式;////設置波特率CAN_InitStructure.CAN_SJW=tsjw;//重新同步跳躍寬度(Tsjw)為tsjw+1個時間單位CAN_SJW_1tqCAN_SJW_2tqCAN_SJW_3tqCAN_SJW_4tqCAN_InitStructure.CAN_BS1=tbs1;//Tbs1=tbs1+1個時間單位CAN_BS1_1tq~CAN_BS1_16tqCAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1個時間單位CAN_BS2_1tq~CAN_BS2_8tqCAN_InitStructure.CAN_Prescaler=brp;//分頻系數(Fdiv)為brp+1//CAN_Init(CAN1,&CAN_InitStructure);//初始化CAN1CAN_FilterInitStructure.CAN_FilterNumber=0;//過濾器0CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//32位CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位IDCAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASKCAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//過濾器0關聯到FIFO0CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活過濾器0CAN_FilterInit(&CAN_FilterInitStructure);//濾波器初始化#ifCAN_RX0_INT_ENABLECAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息掛號中斷允許.NVIC_InitStructure.NVIC_IRQChannel=CAN1_RX0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//主優先順序為1NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//次優先順序為0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);#endifreturn0;}#ifCAN_RX0_INT_ENABLE//使能RX0中斷//中斷服務函數voidCAN1_RX0_IRQHandler(void){CanRxMsgRxMessage;inti=0;CAN_Receive(CAN1,0,&RxMessage);Can_Send_Msg(RxMessage.Data,8);}#endif//can發送一組數據(固定格式:ID為0X12,標准幀,數據幀)//len:數據長度(最大為8)//msg:數據指針,最大為8個位元組.//返回值:0,成功;//其他,失敗;u8Can_Send_Msg(u8*msg,u8len){u8mbox;u16i=0;CanTxMsgTxMessage;TxMessage.StdId=0x12;//標准標識符為0TxMessage.ExtId=0x12;//設置擴展標示符(29位)TxMessage.IDE=0;//使用擴展標識符TxMessage.RTR=0;//消息類型為數據幀,一幀8位TxMessage.DLC=len;//發送兩幀信息for(i=0;i=0XFFF)return1;return0;}//can口接收數據查詢//buf:數據緩存區;//返回值:0,無數據被收到;//其他,接收的數據長度;u8Can_Receive_Msg(u8*buf){u32i;CanRxMsgRxMessage;if(CAN_MessagePending(CAN1,CAN_FIFO0)==0)return0;//沒有接收到數據,直接退出CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);//讀取數據for(i=0;iMCR的SLEEP位)//CAN_InitStructure.CAN_NART=ENABLE;//禁止報文自動傳送//CAN_InitStructure.CAN_RFLM=DISABLE;//報文不鎖定,新的覆蓋舊的//CAN_InitStructure.CAN_TXFP=DISABLE;//優先順序由報文標識符決定//CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//模式設置:mode:0,普通模式;1,回環模式;////設置波特率CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;//重新同步跳躍寬度(Tsjw)為tsjw+1個時間單位CAN_SJW_1tqCAN_SJW_2tqCAN_SJW_3tqCAN_SJW_4tqCAN_InitStructure.CAN_BS1=CAN_BS1_8tq;//Tbs1=tbs1+1個時間單位CAN_BS1_1tq~CAN_BS1_16tqCAN_InitStructure.CAN_BS2=CAN_BS2_7tq;//Tbs2=tbs2+1個時間單位CAN_BS2_1tq~CAN_BS2_8tqCAN_InitStructure.CAN_Prescaler=9;//分頻系數(Fdiv)為brp+1//CAN_Init(CAN2,&CAN_InitStructure);//初始化CAN2CAN_FilterInitStructure.CAN_FilterNumber=14;//過濾器0CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//32位CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位IDCAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASKCAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//過濾器0關聯到FIFO0CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活過濾器0CAN_FilterInit(&CAN_FilterInitStructure);//濾波器初始化#ifCAN_RX2_INT_ENABLECAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);//FIFO0消息掛號中斷允許.NVIC_InitStructure.NVIC_IRQChannel=CAN2_RX0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//主優先順序為1NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//次優先順序為0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);#endifreturn0;}#ifCAN_RX2_INT_ENABLE//使能RX2中斷//中斷服務函數voidCAN2_RX0_IRQHandler(void){CanRxMsgRxMessage;inti=0;CAN_Receive(CAN2,0,&RxMessage);Can2_Send_Msg(RxMessage.Data,8);}#endif//can發送一組數據(固定格式:ID為0X12,標准幀,數據幀)//len:數據長度(最大為8)//msg:數據指針,最大為8個位元組.//返回值:0,成功;//其他,失敗;u8Can2_Send_Msg(u8*msg,u8len){u8mbox;u16i=0;CanTxMsgTxMessage;TxMessage.StdId=0x12;//標准標識符為0TxMessage.ExtId=0x12;//設置擴展標示符(29位)TxMessage.IDE=0;//使用擴展標識符TxMessage.RTR=0;//消息類型為數據幀,一幀8位TxMessage.DLC=len;//發送兩幀信息for(i=0;i=0XFFF)return1;return0;}//can口接收數據查詢//buf:數據緩存區;//返回值:0,無數據被收到;//其他,接收的數據長度;u8Can2_Receive_Msg(u8*buf){u32i;CanRxMsgRxMessage;if(CAN_MessagePending(CAN2,CAN_FIFO0)==0)return0;//沒有接收到數據,直接退出CAN_Receive(CAN2,CAN_FIFO0,&RxMessage);//讀取數據for(i=0;i<8;i++)buf[i]=RxMessage.Data[i];returnRxMessage.DLC;}
8. 如何操作STM32F105的從CAN
#include "can.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供學習使用,未經作者許可,不得用於其它任何用途
//ALIENTEK戰艦STM32開發板
//CAN驅動 代碼
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//修改日期:2012/9/11
//版本:V1.0
//版權所有,盜版必究。
//Copyright(C) 廣州市星翼電子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//CAN初始化
//tsjw:重新同步跳躍時間單元.范圍:1~3; CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
//tbs2:時間段2的時間單元.范圍:1~8;
//tbs1:時間段1的時間單元.范圍:1~16; CAN_BS1_1tq ~CAN_BS1_16tq
//brp :波特率分頻器.范圍:1~1024;(實際要加1,也就是1~1024) tq=(brp)*tpclk1
//注意以上參數任何一個都不能設為0,否則會亂.
//波特率=Fpclk1/((tsjw+tbs1+tbs2)*brp);
//mode:0,普通模式;1,回環模式;
//Fpclk1的時鍾在初始化的時候設置為36M,如果設置CAN_Normal_Init(1,8,7,5,1);
//則波特率為:36M/((1+8+7)*5)=450Kbps
//返回值:0,初始化OK;
// 其他,初始化失敗;
///////////////////////////////////////////////////CAN1////////////////////////////////////////////////////
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
#if CAN_RX0_INT_ENABLE
NVIC_InitTypeDef NVIC_InitStructure;
#endif
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能PORTD時鍾,使能功能復用時鍾
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1時鍾
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化IO
//GPIO_PinRemapConfig(GPIO_Remap2_CAN1,ENABLE);
//CAN單元設置
CAN_InitStructure.CAN_TTCM=DISABLE; //非時間觸發通信模式 //
CAN_InitStructure.CAN_ABOM=DISABLE; //軟體自動離線管理 //
CAN_InitStructure.CAN_AWUM=DISABLE; //睡眠模式通過軟體喚醒(清除CAN->MCR的SLEEP位)//
CAN_InitStructure.CAN_NART=ENABLE; //禁止報文自動傳送 //
CAN_InitStructure.CAN_RFLM=DISABLE; //報文不鎖定,新的覆蓋舊的 //
CAN_InitStructure.CAN_TXFP=DISABLE; //優先順序由報文標識符決定 //
CAN_InitStructure.CAN_Mode= mode; //模式設置: mode:0,普通模式;1,回環模式; //
//設置波特率
CAN_InitStructure.CAN_SJW=tsjw; //重新同步跳躍寬度(Tsjw)為tsjw+1個時間單位 CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1個時間單位CAN_BS1_1tq ~CAN_BS1_16tq
CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1個時間單位CAN_BS2_1tq ~ CAN_BS2_8tq
CAN_InitStructure.CAN_Prescaler=brp; //分頻系數(Fdiv)為brp+1 //
CAN_Init(CAN1, &CAN_InitStructure); // 初始化CAN1
CAN_FilterInitStructure.CAN_FilterNumber=0; //過濾器0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位ID
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//過濾器0關聯到FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活過濾器0
CAN_FilterInit(&CAN_FilterInitStructure);//濾波器初始化
#if CAN_RX0_INT_ENABLE
CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息掛號中斷允許.
NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主優先順序為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次優先順序為0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
return 0;
}
#if CAN_RX0_INT_ENABLE //使能RX0中斷
//中斷服務函數
void CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN1, 0, &RxMessage);
Can_Send_Msg(RxMessage.Data,8);
}
#endif
//can發送一組數據(固定格式:ID為0X12,標准幀,數據幀)
//len:數據長度(最大為8)
//msg:數據指針,最大為8個位元組.
//返回值:0,成功;
// 其他,失敗;
u8 Can_Send_Msg(u8* msg,u8 len)
{
u8 mbox;
u16 i=0;
CanTxMsg TxMessage;
TxMessage.StdId=0x12; // 標准標識符為0
TxMessage.ExtId=0x12; // 設置擴展標示符(29位)
TxMessage.IDE=0; // 使用擴展標識符
TxMessage.RTR=0; // 消息類型為數據幀,一幀8位
TxMessage.DLC=len; // 發送兩幀信息
for(i=0;i<8;i++)
TxMessage.Data[i]=msg[i]; // 第一幀信息
mbox= CAN_Transmit(CAN1, &TxMessage);
i=0;
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //等待發送結束
if(i>=0XFFF)return 1;
return 0;
}
//can口接收數據查詢
//buf:數據緩存區;
//返回值:0,無數據被收到;
// 其他,接收的數據長度;
u8 Can_Receive_Msg(u8 *buf)
{
u32 i;
CanRxMsg RxMessage;
if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0; //沒有接收到數據,直接退出
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//讀取數據
for(i=0;i<8;i++)
buf[i]=RxMessage.Data[i];
return RxMessage.DLC;
}
///////////////////////////////////////////////////CAN2////////////////////////////////////////////////////
u8 CAN2_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
#if CAN_RX2_INT_ENABLE
NVIC_InitTypeDef NVIC_InitStructure;
#endif
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);//使能PORTB時鍾
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);//使能CAN2時鍾
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化IO
//GPIO_PinRemapConfig(GPIO_Remap_CAN2,ENABLE);
//CAN單元設置
CAN_InitStructure.CAN_TTCM=DISABLE; //非時間觸發通信模式 //
CAN_InitStructure.CAN_ABOM=DISABLE; //軟體自動離線管理 //
CAN_InitStructure.CAN_AWUM=DISABLE; //睡眠模式通過軟體喚醒(清除CAN->MCR的SLEEP位)//
CAN_InitStructure.CAN_NART=ENABLE; //禁止報文自動傳送 //
CAN_InitStructure.CAN_RFLM=DISABLE; //報文不鎖定,新的覆蓋舊的 //
CAN_InitStructure.CAN_TXFP=DISABLE; //優先順序由報文標識符決定 //
CAN_InitStructure.CAN_Mode= CAN_Mode_Normal; //模式設置: mode:0,普通模式;1,回環模式; //
//設置波特率
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳躍寬度(Tsjw)為tsjw+1個時間單位 CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; //Tbs1=tbs1+1個時間單位CAN_BS1_1tq ~CAN_BS1_16tq
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;//Tbs2=tbs2+1個時間單位CAN_BS2_1tq ~ CAN_BS2_8tq
CAN_InitStructure.CAN_Prescaler=9; //分頻系數(Fdiv)為brp+1 //
CAN_Init(CAN2, &CAN_InitStructure); // 初始化CAN2
CAN_FilterInitStructure.CAN_FilterNumber=14; //過濾器0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位ID
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//過濾器0關聯到FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活過濾器0
CAN_FilterInit(&CAN_FilterInitStructure);//濾波器初始化
#if CAN_RX2_INT_ENABLE
CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);//FIFO0消息掛號中斷允許.
NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主優先順序為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次優先順序為0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
return 0;
}
#if CAN_RX2_INT_ENABLE //使能RX2中斷
//中斷服務函數
void CAN2_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN2, 0, &RxMessage);
Can2_Send_Msg(RxMessage.Data,8);
}
#endif
//can發送一組數據(固定格式:ID為0X12,標准幀,數據幀)
//len:數據長度(最大為8)
//msg:數據指針,最大為8個位元組.
//返回值:0,成功;
// 其他,失敗;
u8 Can2_Send_Msg(u8* msg,u8 len)
{
u8 mbox;
u16 i=0;
CanTxMsg TxMessage;
TxMessage.StdId=0x12; // 標准標識符為0
TxMessage.ExtId=0x12; // 設置擴展標示符(29位)
TxMessage.IDE=0; // 使用擴展標識符
TxMessage.RTR=0; // 消息類型為數據幀,一幀8位
TxMessage.DLC=len; // 發送兩幀信息
for(i=0;i<8;i++)
TxMessage.Data[i]=msg[i]; // 第一幀信息
mbox= CAN_Transmit(CAN2, &TxMessage);
i=0;
while((CAN_TransmitStatus(CAN2, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //等待發送結束
if(i>=0XFFF)return 1;
return 0;
}
//can口接收數據查詢
//buf:數據緩存區;
//返回值:0,無數據被收到;
// 其他,接收的數據長度;
u8 Can2_Receive_Msg(u8 *buf)
{
u32 i;
CanRxMsg RxMessage;
if( CAN_MessagePending(CAN2,CAN_FIFO0)==0)return 0; //沒有接收到數據,直接退出
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);//讀取數據
for(i=0;i<8;i++)
buf[i]=RxMessage.Data[i];
return RxMessage.DLC;
}